我有两个名为InterfaceController
和LoadInterfaceController
的课程。
我正在LoadInterfaceController
中提取我希望传递给variable
班级中InterfaceController
的信息。
LoadInterfaceController
:
- (void)fetchData {
NSArray *database = //fetched information
//... on fetch complete
InterfaceController *interfaceController = [InterfaceController alloc];
[interfaceController initilizeDatabase:database];
}
InterfaceController
:
@property (nonatomic) NSArray *db;
- (void)initilizeDatabase:(NSArray *)database {
self.db = database;
NSLog(@"database count: %d", database.count); //: 3
NSLog(@"db count: %d", self.db.count); //: 3
[self utilizeInformation];
}
- (void)utilizeInformation {
NSLog(@"db count: %d", self.db.count); //: 0
//...
}
db
的信息不会保留在initilizeDatabase:
函数之外。
我已尝试在main thread
上运行它(如here所述),但信息仍未保留。我如何指定线程来传递我的第二堂课的信息?
答案 0 :(得分:2)
线程或保留没有问题,从这个角度看,一切都是正确的。但还有另一个问题:当您以编程方式初始化InterfaceController
时,您可以创建它的实例,并且db
属性完全存储,直到您的Watch再次加载它,因为Watch会创建另一个{{1}的实例因此,您可以在新实例上获得空InterfaceController
属性。
我建议的解决方案是在您的架构中添加一个模型实体,它将充当单例类,并确保您的数据始终可用。
以下是考虑您的示例的实现:
db
:
XYZDataBaseManager
@interface XYZDataBaseManager : NSObject
+ (nonnull XYZDataBaseManager *)sharedInstance;
- @property (nonnull, strong) NSMutableArray *data;
@end
@implementation XYZDataBaseManager
+ (XYZDataBaseManager *)sharedInstance {
static dispatch_once_t once;
static XYZDataBaseManager *instance;
dispatch_once(&once, ^{
instance = [[XYZDataBaseManager alloc] init];
});
return instance;
}
@end
:
LoadInterfaceController
- (void)fetchData {
NSArray *database = //fetched information
[XYZDataBaseManager sharedInstance].data = database;
}
:
InterfaceController
当然,有很多事情需要改进,但我认为主要观点很明确。而且我也没有执行此代码,因此可能存在一些错别字(我更加面向快速)。