2010-06-10 64 views
3

我試圖在示例iPad應用程序中實現TTPhotoViewController。我已經正確實施了TTPhotoSourceTTPhoto協議。 TTPhotoViewController確實顯示圖像,但直到刷完。TTPhotoViewController:圖像不加載,直到刷卡

下面的標籤欄中的右側和左側按鈕似乎根本不起作用,它們從不改變顯示的圖像。永不放棄UIActivityIndicatorView,也不會在到達最後或第一張圖像時驗證右側和左側按鈕。

我正在初始化TTPhotoViewController的子類作爲UINavigationController對象的rootViewController,我將它添加到視圖中。

這排除了該問題在這裏面臨的可能性: http://three20.stackexchange.com/questions/78/ttphotoviewcontroller-not-loading-images-immediately

我思念還有什麼?任何人遇到類似的問題,並找到解決辦法?

感謝, 拉吉

回答

0

一些調試後,我發現了這個問題,這只是一個權宜之計:

在TTModelViewController類Three20UI項目,找對方法

-refresh 

並發表評論條件:

if (_isViewAppearing) 

最後會調用以前未被調用的方法-updateView

這是一個快速修復,必須稍後調查一下bool:_isViewAppearing

+0

任何有明確解決方案的人都可以添加您的答案。 。 。 – 2010-06-15 08:58:25

1

有同樣的問題。 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自身附加時發送正確的加載通知。

+0

看起來像一個完美的方法。我將盡力在稍後編寫代碼,看看它對我的實現有多適合。 – 2010-08-10 05:09:00

3

您很有可能會覆蓋TTPhotoViewController子類中的viewWillAppear方法,但忘記調用super方法。

相關問題