Была такая же проблема.TTPhotoSource должен отправить modelDidFinishLoad: своим делегатам после завершения загрузки ... в противном случае TTPhotoViewController предполагает, что он еще не готов.
Однако это еще не все.Особенно при загрузке локальных изображений ваш источник фотографий, вероятно, завершит загрузку до того, как TTPhotoViewController будет зарегистрирован в качестве делегата.Итак, вам нужно проверить наличие делегатов, добавленных в ваш TTPhotoSource, и отправить им сообщение modelDidFinishLoad: если вы закончите загрузку, когда они добавлены.
И это легче сказать, чем сделать, если вы наследуете от TTModel, потому чтонет способа зарегистрироваться в NSMutableArray, чтобы узнать, когда он изменился.
Итак ... добавьте следующий код в ваш подкласс 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;
}
Это создаст "виртуальный""свойство с именем superDelegates, которое является просто NSArray, а не NSMutableArray.Методы insertObject: inSuperDelegatesAtIndex: и removeObjectFromSuperDelegatesAtIndex: потому что их имена включают имя свойства «superDelegates», разрешают функции кодирования Key-Value (которую вы автоматически имеете, потому что это неформальный протокол) mutableArrayValueForKey: для синтеза объекта для проксиNSMutableArray, который позволяет редактировать свойство superDelegates путем преобразования операций мутации в вызовы insertObject: inSuperDelegatesAtIndex: и removeObjectFromSuperDelegatesAtIndex: method.
Затем все, что вам нужно сделать, это переопределить метод «делегатов», чтобы вернуть такой методсгенерированный прокси и poof, все изменения массива проходят через вас, что позволяет вам отправлять надлежащее уведомление о загрузке, когда TTPhotoViewController присоединяется.