Ich benutze RestKit in einer Anwendung und ich konfigurierte die Mapper und funktioniert gut. Ich habe CoreData zum Caching verwendet, und die üblichen fecthController für die Anzeige der Kerndatenmodelle in einer Tabellenansicht. Die erste Bildschirm meiner App ist ein UITabViewController mit drei Tabs. In jedem Tab habe ich verschiedene Informationen von verschiedenen Entitäten, ich kann zwischen den Tabs wechseln und alles funktioniert gut. Das Problem ist, wenn ich in einem Tab suche, habe ich die Daten von anderen Tabs verloren. Ich habe tief in das Problem gegraben und ich habe folgendes gesehen: Wenn ich nach etwas suche, lösche ich meine anderen Entitäten !!. Ich habe versucht, verschiedene Kontexte und einige Dinge zu erstellen, die mit den Kerndaten zusammenhängen, aber nichts funktioniert.RestKit behalten CoreData-Objekte
// 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;
}
}
Sie müssen Code anzeigen und geben Details, wie Sie getestet und was Sie tatsächlich sehen verschwinden – Wain
Ich habe ein Beispiel zur Verfügung gestellt! Vielen Dank @Wain – ocelot
Also was ist Datenliste und was sind die IDs, die Sie mit dem Prädikat verwenden? Schließt das Prädikat alles einfach aus? – Wain