2014-06-26 4 views
0

Im travaillant sur un projet et ma classe UIWebView doit exécuter une méthode de ma classe DownloadViewdélégué ne pas être correctement réglé

J'utilise le projet open source https://github.com/robertmryan/download-manager

Lorsque ce code exécute la méthode:

DownloadTableView *download = [[DownloadTableView alloc] init]; 
[download queueAndStartDownloads:_downloadURL]; 

Ce ne marche pas en ligne droite définie le délégué

self.downloadManager = [[DownloadManager alloc] initWithDelegate:self]; 

La méthode de téléchargement entier début

- (void)queueAndStartDownloads:(NSURL *)url 
{ 


NSString *documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; 
NSString *downloadFolder = [documentsPath stringByAppendingPathComponent:@"downloads"]; 

if ([[NSFileManager defaultManager] fileExistsAtPath:downloadFolder])  //Does file exist? 
{ 
    if (![[NSFileManager defaultManager] createDirectoryAtPath:downloadFolder 
            withIntermediateDirectories:NO 
                attributes:nil 
                 error:nil]) { 

    } 
} 

self.downloadManager = [[DownloadManager alloc] initWithDelegate:self]; 
self.downloadManager.maxConcurrentDownloads = 4; 


    NSString *downloadFilename = [downloadFolder stringByAppendingPathComponent:[url lastPathComponent]]; 
    [self.downloadManager addDownloadWithFilename:downloadFilename URL:url]; 


self.cancelButton.enabled = YES; 
self.startDate = [NSDate date]; 
NSLog(@"DOwnling"); 
[self.downloadManager start]; 

} 

Les méthodes dans ma classe DownloadView exécutent wont

- (void)didFinishLoadingAllForManager:(DownloadManager *)downloadManager 

{

+1

Vous n'avez pas montré suffisamment de code pour pouvoir identifier le problème. Mais en général, ne faites pas une méthode "initWithDelegate", ce n'est pas la manière habituelle de faire les choses. Utilisez l'initialiseur désigné pour votre classe (ou sous-classe) et attribuez le délégué après cela. –

+0

Im utilisant ce gestionnaire de téléchargement gars https://github.com/robertmryan/download-manager – nickivey

+0

Si un délégué est requis, je ne vois rien de mal avec l'initialiseur désigné étant initWithDelegate. – CrimsonChris

Répondre

1

En supposant que votre code est sous ARC, à partir du code Je comprends que DownloadTableView *download est une variable locale. Par conséquent l'objet DownloadTableView est libéré après la portée de la méthode où il est déclaré se termine. Par conséquent, la méthode delegate n'est pas appelée, car le délégué est libéré. Pour éviter cela, vous pouvez créer un objet DownloadTableView en tant que variable d'instance.

+0

Merci pour le conseil que cela fonctionne, mais la vue de la table ne met toujours pas à jour une idée pourquoi? – nickivey

+0

Appelez-vous reloadData? –

Questions connexes