我是 IOS 编程新手,目前正在学习核心数据,我开始运行代码,我只需要在核心数据中保存特定对象。那么我该怎么做呢?
根据场景,我有来自服务器的数据以及本地存储(核心数据),但是当用户关闭应用程序(进入后台)时,我想将数据存储在服务器中(如果网络可用),如果不是那么在本地存储(但仅选择 - 表示应存储特定数据,有些对象来自在线服务器,我不想存储在本地)。
如果可能的话,请让我知道任何解决方案。
问候尼萨尔·艾哈迈德
我是 IOS 编程新手,目前正在学习核心数据,我开始运行代码,我只需要在核心数据中保存特定对象。那么我该怎么做呢?
根据场景,我有来自服务器的数据以及本地存储(核心数据),但是当用户关闭应用程序(进入后台)时,我想将数据存储在服务器中(如果网络可用),如果不是那么在本地存储(但仅选择 - 表示应存储特定数据,有些对象来自在线服务器,我不想存储在本地)。
如果可能的话,请让我知道任何解决方案。
问候尼萨尔·艾哈迈德
我看到了两种方法来实现这一点:
遍历插入和更新的对象,并恢复那些你不想保存的对象。插入的对象应该被删除,更新的应该被刷新:
for (NSManagedObject* obj in [self.managedObjectContext insertedObjects]) {
if (/*Shouldn't be saved*/) {
[self.managedObjectContext deleteObject:obj];
}
}
for (NSManagedObject* obj in [self.managedObjectContext updatedObjects]) {
if (/*Shouldn't be saved*/) {
[self.managedObjectContext refreshObject:obj mergeChanges:NO];
}
}
创建单独的托管对象上下文。重新创建要在新上下文中保存的对象,然后保存。
NSManagedObjectContext* newContext = [[NSManagedObjectContext alloc] init];
[newContext setPersistentStoreCoordinator:[self.managedObjectContext persistentStoreCoordinator]];
for (NSManagedObject* obj in objectsWantToSave) {
NSEntityDescription* entity = [obj entity];
NSDictionary* valuesByKeys = [obj dictionaryWithValuesForKeys:[[entity attributesByName] allKeys]];
NSManagedObject* objCopy = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:newContext];
[objCopy setValuesForKeysWithDictionary:valuesByKeys];
}
[newContext save:NULL];
第二种方法对我来说更好。
看看 UIManagedDocument - http://developer.apple.com/library/ios/#documentation/uikit/reference/UIManagedDocument_Class/Reference/Reference.html
它处理了使用核心数据所涉及的许多样板文件。