Avait le même problème. Le TTPhotoSource doit envoyer modelDidFinishLoad: à ses délégués quand il a fini de charger ... sinon, TTPhotoViewController suppose qu'il n'est pas encore prêt.
Mais ce n'est pas tout. En particulier lors du chargement d'images locales, votre source photo finira probablement le chargement avant que TTPhotoViewController soit enregistré en tant que délégué. Vous devez donc vérifier les délégués ajoutés à votre TTPhotoSource et leur envoyer un message modelDidFinishLoad: si vous avez terminé le chargement lors de leur ajout.
Et c'est plus facile à dire qu'à faire si vous héritez de TTModel, car il n'y a aucun moyen de s'enregistrer avec un NSMutableArray pour savoir quand il a été changé.
... Alors ajoutez le code suivant à votre sous-classe TTPhotoViewController ...
// superDelegates KVO Mutator Methods
- (NSMutableArray*)delegates {
return [self mutableArrayValueForKey:@"superDelegates"];
}
- (void)insertObject:(id)object inSuperDelegatesAtIndex:(NSUInteger)index {
[super.delegates insertObject:object atIndex:index];
if ([self isLoaded]) {
if ([object respondsToSelector:@selector(modelDidFinishLoad:)]) {
[object performSelector:@selector(modelDidFinishLoad:) withObject:self];
}
}
}
- (void)removeObjectFromSuperDelegatesAtIndex:(NSUInteger)index {
[super.delegates removeObjectAtIndex:index];
}
- (NSArray*) superDelegates {
return super.delegates;
}
Cela crée une propriété « virtuelle » du nom superdélégués, qui est simplement un NSArray, pas NSMutableArray. Les méthodes insertObject: inSuperDelegatesAtIndex: et removeObjectFromSuperDelegatesAtIndex: car leurs noms incluent le nom de la propriété "superDelegates", autorisent la fonction Key-Value Coding (que vous avez automatiquement car il s'agit d'un protocole informel) mutableArrayValueForKey: pour synthétiser un objet proxy conforme à NSMutableArray, qui permet de modifier la propriété superDelegates en traduisant les opérations de mutation en appels aux méthodes insertObject: inSuperDelegatesAtIndex: et removeObjectFromSuperDelegatesAtIndex:.Ensuite, tout ce que vous avez à faire est de surcharger la méthode "délégués" pour renvoyer un tel proxy généré, et toutes les modifications de tableau vous traversent, vous permettant d'envoyer la notification de chargement appropriée lorsque TTPhotoViewController se connecte.
Tout le monde avec une solution claire peut ajouter vos réponses. . . –