gpt4 book ai didi

ios - RestKit 保留 CoreData 对象

转载 作者:可可西里 更新时间:2023-11-01 02:17:19 25 4
gpt4 key购买 nike

我在一个应用程序中使用 RestKit,我配置了映射器并且工作正常。我决定使用 CoreData 进行缓存,并使用通常的 fecthController 在表格 View 中显示核心数据模型。我的应用程序的第一个屏幕是一个具有三个选项卡的 UITabViewController。在每个选项卡中,我都有来自不同实体的不同信息,我可以在选项卡之间切换并且一切正常。问题是当我在一个选项卡中进行搜索时,我丢失了其他选项卡中的数据。我深入研究了这个问题,并且看到了以下内容:当我搜索某些内容时,正在删除我的其他实体!!我尝试创建不同的上下文和一些与核心数据相关的东西,但没有任何效果。

// Configuration stuff
let objectManager: RKObjectManager = RKObjectManager(baseURL: baseURL);
let managedObjectModel: NSManagedObjectModel = NSManagedObjectModel(contentsOfURL: modelURL!)!;
let managedObjectStore: RKManagedObjectStore = RKManagedObjectStore(managedObjectModel: managedObjectModel);
objectManager.managedObjectStore = managedObjectStore;
managedObjectStore.createPersistentStoreCoordinator();
do {
try managedObjectStore.addSQLitePersistentStoreAtPath(storePath, fromSeedDatabaseAtPath: seedPath, withConfiguration: nil, options: nil);
} catch let err as NSError {
fatalError()
}

// Create the managed object contexts
managedObjectStore.createManagedObjectContexts();
managedObjectStore.managedObjectCache = RKInMemoryManagedObjectCache(managedObjectContext: managedObjectStore.persistentStoreManagedObjectContext)

// Mapping
let entityMapping: RKEntityMapping = RKEntityMapping(
forEntityForName: "Entity",
inManagedObjectStore: RKObjectManager.sharedManager().managedObjectStore
);
entityMapping.identificationAttributes = ["id"];

entityMapping.addAttributeMappingsFromArray([
"id", "firstName", "lastName", "birthdate"
]);

//Get Data from server
class Datalist{
class fun fetchData(successClosure:[Entity]->Void,failure:String->Void){
RKObjectManager.sharedManager().getObjectsAtPath(
path,
parameters: nil,
success: {
( operation: RKObjectRequestOperation!, result: RKMappingResult!) -> Void in
dispatch_async(dispatch_get_main_queue(), {
() -> Void in
successClosure(result.array());
});
},
failure: {
( operation: RKObjectRequestOperation!, error: NSError!) -> Void in
dispatch_async(dispatch_get_main_queue(), {
() -> Void in
failureClosure();
});
}
);
}
}
}
//Show data
class ListViewController:NSFetchedResultsControllerDelegate{

private var fetchedResultsController: NSFetchedResultsController!;

override func viewDidLoad() {
super.viewDidLoad();
fetchedResultsController = NSFetchedResultsController(
fetchRequest: fetchRequest, managedObjectContext: RKManagedObjectStore.defaultStore().mainQueueManagedObjectContext,
sectionNameKeyPath: "formatted",
cacheName: nil)

fetchedResultsController?.delegate = self
getData()
}

private func getData(){
DataList.fetchData({data in
let ids = getEntitiesId(data)
fetchedResultsController.fetchRequest.predicate = createPredicateFromIds(ids)
try! self.fetchedResultsController?.performFetch()
},failure:{message in
showMessage(message)
})
}

func createPredicateFromIds( entityIds: [Int] ) -> NSPredicate {
let predicate: NSPredicate = NSPredicate( format: "id IN $ENTITYIDS" ).predicateWithSubstitutionVariables(["ENTITYIDS" : entityIds]);
return predicate;
}
}

最佳答案

我终于看到了问题所在,它与删除孤立对象有关。因为在三个选项卡中是不同的实体,当我在实体中执行搜索时,会使其他实体成为孤立实体并删除数据!只覆盖这个属性:

override var deletesOrphanedObjects: Bool  {
get{
return false;
}
set{

}
};

关于ios - RestKit 保留 CoreData 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36137727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com