有同樣的問題。 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;
}
這將創建一個「虛擬」屬性命名超級代表,這僅僅是一個NSArray,不是一個NSMutableArray。 insertObject:inSuperDelegatesAtIndex:和removeObjectFromSuperDelegatesAtIndex:方法,因爲它們的名稱包含「superDelegates」屬性的名稱,所以允許鍵值編碼功能(因爲它是非正式協議,您自動擁有該功能)mutableArrayValueForKey:合成代理對象,符合NSMutableArray,它允許通過將突變操作轉換爲對insertObject的調用來編輯superDelegates屬性:inSuperDelegatesAtIndex:和removeObjectFromSuperDelegatesAtIndex:methods。然後,你所要做的就是覆蓋「委託」方法來返回這樣一個生成的代理,並且poof,所有的數組更改都會通過你運行,允許你在TTPhotoViewController自身附加時發送正確的加載通知。
任何有明確解決方案的人都可以添加您的答案。 。 。 – 2010-06-15 08:58:25