我有一个从 Core Data 加载数据的对象。然后我使用用户输入/选择修改对象。
我的第一个想法是重写属性的 setter 方法:
-(void)setType:(NSString *)type {
NSLog(@"setType fired | newType: %@", type);
_type = type;
appDelegate *appDelegate = (appDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:DEFAULTS_DB];
NSError *error;
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects.count == 1) {
Defaults *defaults = [fetchedObjects objectAtIndex:0];
defaults.sceneType = type;
}
if (![context save:&error]) {
NSLog(@"Error in saving first run defaults | error: %@", error);
}
else {
NSLog(@"new type was saved to core data");
}
}
我的另一个想法是在applicationWillResignActive:
触发时更新核心数据(但该方法在应用程序冻结之前只运行几秒钟)和用户注销时。
我正在创建的应用程序是用户将启动的应用程序,设置他想要的内容,然后将其放下 10-60 分钟,直到他再次使用它,所以我担心我的应用程序在不活动时被杀死并丢失数据。
在 setter 方法中更新核心数据是处理更新的好方法还是一个非常糟糕的主意(资源密集,速度太慢)?