WatchKit问题在类之间保留数据

时间:2015-09-16 07:12:53

标签: objective-c multithreading class watchkit nsthread

我有两个名为InterfaceControllerLoadInterfaceController的课程。

我正在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所述),但信息仍未保留。我如何指定线程来传递我的第二堂课的信息?

1 个答案:

答案 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

当然,有很多事情需要改进,但我认为主要观点很明确。而且我也没有执行此代码,因此可能存在一些错别字(我更加面向快速)。