Iphone TTPhotoViewController:只有在刷卡后才能加载图像

Iphone TTPhotoViewController:只有在刷卡后才能加载图像,iphone,ipad,three20,ttphotoviewcontroller,Iphone,Ipad,Three20,Ttphotoviewcontroller,我试图在一个示例iPad应用程序中实现TTPhotoViewController。我已经正确地实现了TTPhotoSource和TTPhoto协议。TTPhotoViewController确实显示图像,但只有在刷卡后才会显示 下面选项卡栏中的左右按钮似乎根本不起作用,它们从不更改显示的图像。当到达最后一张或第一张图像时,UIActivityIndicatorView将不会显示,也不会验证左右按钮 我正在将TTPhotoViewController的子类初始化为UINavigationContr

我试图在一个示例iPad应用程序中实现
TTPhotoViewController
。我已经正确地实现了
TTPhotoSource
TTPhoto
协议。
TTPhotoViewController
确实显示图像,但只有在刷卡后才会显示

下面选项卡栏中的左右按钮似乎根本不起作用,它们从不更改显示的图像。当到达最后一张或第一张图像时,
UIActivityIndicatorView
将不会显示,也不会验证左右按钮

我正在将
TTPhotoViewController
的子类初始化为
UINavigationController
对象的rootViewController,并将其添加到视图中

这排除了这里面临的问题的可能性:

我还缺什么?有人遇到过类似的问题并找到了解决办法吗

谢谢,
Raj

经过一些调试,我发现了问题,这只是一个快速修复:

在Three20UI项目的TTModelViewController类中,找到方法

-refresh
并注释if条件:

if (_isViewAppearing)
最终将调用以前未调用的
-updateView
方法


这是一个快速解决方案,必须调查bool:
\u isview稍后出现的问题。

也有同样的问题。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:InsuperDelegatesIndex:和RemoveObjectFromSuperDelegatesIndex:方法,因为它们的名称包括“superDelegates”属性的名称,所以允许键值编码函数(由于它是非正式协议,所以自动具有)mutableArrayValueForKey:合成符合NSMutableArray的代理对象,它允许通过将变异操作转换为对insertObject:InsuperDelegatesIndex:和RemoveObjectFromSuperDelegatesIndex:方法的调用来编辑superDelegates属性


然后,您所要做的就是重写“delegates”方法以返回这样一个生成的代理,然后poof,所有数组更改都会通过您运行,允许您在TTPhotoViewController自身连接时发送正确的加载通知。

您很可能已覆盖
视图,将在
TTPhotoViewController
子类中出现
方法,但忘记调用超级方法。

任何其他具有明确解决方案的人都可以添加您的答案。看起来是个完美的方法。稍后我将尝试编写代码,看看它是否适合我的实现。