2016-03-21 35 views
2

Bir uygulamada RestKit kullanıyorum ve mappers'ı yapılandırdım ve iyi çalışıyor. Önbellek için CoreData'ya ve bir tablo görünümünde çekirdek veri modellerini görüntülemek için her zamanki fecthController'a karar verdik. Uygulamamın ekranı üç sekmeli bir UITabViewController. Her sekmede farklı varlıklardaki farklı bilgilere sahibim, sekmeler ve tüm işler arasında geçiş yapabilirim. Sorun, bir sekmede arama yaptığımda, diğer sekmelerdeki verileri kaybettim. Sorunu derinden kazdım ve aşağıdakileri gördüm: bir şey ararken diğer varlıklarımı siliyorum !! Farklı bağlamlar ve çekirdek verilerle ilgili bazı şeyler yaratmaya çalıştım ama hiçbir şey işe yaramıyor.RestKit CoreData nesnelerini koru

// 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; 
    } 
} 
+0

bazı kod göstermek ve test dair ayrıntıları ve ne aslında – Wain

+0

kaybolur bkz Ben bir örnek sağlanan vermek gerekir! Teşekkür ederiz @Wain – ocelot

+0

Peki ne veri listesi ve yüklemi ile kullanmakta olduğunuz kimlikler nelerdir? Bu yüklem, her şeyi hariç tutuyor mu? – Wain

cevap

1

Sonunda sorunu görüyorum, bu, artık nesnelerin silinmesiyle ilgili. Çünkü üç sekmede farklı varlıklar var ve bende bir arama yaptığımda diğer varlıkları öksüz yapıyor ve verileri siliyor! Sadece bu özelliği geçersiz:

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

     } 
    };