我正在iTunesU上学习斯坦福CS193P课程,对于如何完成作业4中最近查看的照片部分有点困惑。
在作业中,我们将有一个带有两个选项卡的选项卡栏控制器。第一个选项卡是一个导航控制器,它将显示一个位置表,它将推送一个照片名称表,它会推送带有照片的滚动视图第二个选项卡是一个导航控制器,它将显示最近查看的照片表,该表将推送带有照片的滚动视图。
我有第一个选项卡在工作,现在当我用图像推送滚动视图时,我还想将该照片添加到最近照片的数组中,哪个MVC应该拥有这个最近照片数组?
-
选项卡视图控制器(如果是这样的话,文档说这个类不用于子类)
-
第二个选项卡的根表视图控制器(我如何将当前照片传递给实例在另一个选项卡中)(坦率地说,第一个选项卡应该知道第二个标签吗)
-
第一个选项卡的根表视图控制器(那么第二个选项卡如何从第一个选项卡提取此数据?)
-
其他
我想我对MVC、协议、委托和数据源还不太清楚。如果你有这个任务的解决方案,我可以仔细查看,我将不胜感激
我最终推送并从用户默认值中提取数据。尽管我很好奇为什么选项卡栏控制器不用于子类。当多个选项卡需要数据时,这似乎是拥有数据最合乎逻辑的地方。
我也做过类似的事情,如果我没有完全误解你的问题,你可以创建一个Singelton,它可以像某种共享数据库一样工作。它永远不会以正常的方式初始化,只是在您第一次使用它时创建的。这个singelton可以包含你的数组,然后你可以从任何地方调用它,只需写:
[SingeltonType main].sharedPhotos
以下示例来自我自己的代码,其中我有一个"用户",它是应用程序的所有者。在那里,我存储了一个数据库,其中包含运行时任何地方都可以使用的信息。
标题:
@interface User : NSObject {
Database *_storage;
}
@property (nonatomic, retain) Database *storage;
+(User*)owner;
主文件:
#import "User.h"
@implementation User
@synthesize password = storage = _storage;
static User* _owner = nil;
+(User*)owner {
@synchronized([User class]) {
if(!_owner) [[self alloc] init];
return _owner;
}
return nil;
}
+(id)alloc {
@synchronized([User class]) {
NSAssert(_owner == nil, @"Attempted to allocate a second instance of a singleton.");
_owner = [super alloc];
return _owner;
}
return nil;
}
-(id)init {
self = [super init];
if(self != nil) {
self.storage = [[[Database alloc] init] autorelease];
}
return self;
}
然后我就这样称呼它:
[User owner].storage // which gives me access to it
希望能有所帮助!如果你需要从不同的地方访问数据,这真的很有用:)
注意:您将只有此对象的一个实例,不能创建更多实例。
经过一系列额外的搜索,我没有找到任何一种在选项卡之间传递数据的一致方法。
由于我们只存储相对少量的数据,我决定创建一个类,使用类方法(为了方便)将数据推送到用户默认值。
我使用协议解决了这个问题。我在显示图像(和UIScrollView)的类中创建了协议。然后,我采用了"查看的照片"tableController类中的协议,并实现了传递查看的图像的协议方法。我遇到的问题是,你如何将"查看的照片"tableController类定义为委托,因为1)它还没有加载,可能要在查看图片后才能加载2)你如何通过导航控制器和选项卡控制器指向声明协议的类。很想听听这里的专家关于协议或类方法是否是编程方法论的正确方法吗?
谢谢KB