WatchKit 问题在 类 之间保留数据

WatchKit issue retaining data between classes

我有两个 class 名为 InterfaceControllerLoadInterfaceController

我正在 LoadInterfaceController 中获取信息,我希望将其传递给 InterfaceController class.

中的 variable

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所解释的),但信息仍然没有保留。我如何指定线程来传递来自我的第二个 class?

的信息

线程和保留都没有问题,从这个角度来看一切都是对的。但是还有另一个问题:当您以编程方式初始化 InterfaceController 时,您会创建它的一个实例并且 db 属性 会被完美存储,直到您的 Watch 再次加载它,因为 Watch 创建了另一个实例InterfaceController 结果是你在新实例上得到空的 db 属性。

我在这里建议的解决方案是在您的体系结构中添加一个模型实体,该实体将充当单例 class 并确保您的数据始终可用。

这是考虑到您的示例的实现:

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:

@property (nonatomic) NSArray *db;

- (void)utilizeInformation {
    NSLog(@"db count: %d", [XYZDataBaseManager sharedInstance].data.count]);
}

当然还有很多需要改进的地方,但我认为主要思想很明确。而且我没有执行这段代码,所以可能会有一些拼写错误(我更倾向于swift)。