2013-03-24 13 views
12

JSON verilerini ayrıştırmak ve veritabanına kaydetmek için RestKit 0.20 kullanıyorum. THere, RestKit tarafından ele alınan ve tasarruf sağlayan eşlenmiş bir SchoolClass öğesidir. Seçtiğim sınıfları kaydeden MyClass adında başka bir varlık var. Bu sadece cihazda yereldir. İşte iOS RestKit yerel varlıkları veritabanına kaydedemiyor

yönetilen veri dükkanını

// Initialize managed object store 
    NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; 
    RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel]; 
    objectManager.managedObjectStore = managedObjectStore; 

    /** 
    Complete Core Data stack initialization 
    */ 
    [managedObjectStore createPersistentStoreCoordinator]; 
    NSString *storePath = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"RKMainDb.sqlite"]; 
    NSString *seedPath = [[NSBundle mainBundle] pathForResource:@"RKSeedDatabase" ofType:@"sqlite"]; 
    NSError *error; 
    NSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:storePath fromSeedDatabaseAtPath:seedPath withConfiguration:nil options:nil error:&error]; 
    NSAssert(persistentStore, @"Failed to add persistent store with error: %@", error); 

    // Create the managed object contexts 
    [managedObjectStore createManagedObjectContexts]; 

    // Configure a managed object cache to ensure we do not create duplicate objects 
    managedObjectStore.managedObjectCache = [[RKInMemoryManagedObjectCache alloc] initWithManagedObjectContext:managedObjectStore.persistentStoreManagedObjectContext]; 
O kurtardı başarılı görünür

ve MyClasseTableViewController I'de başlatmak kod ben Sınıfım varlık İşte

NSManagedObjectContext *managedObjCtx = [RKManagedObjectStore defaultStore].mainQueueManagedObjectContext; 
MyClass* course = [managedObjCtx insertNewObjectForEntityForName:@"MyClass"]; 

.. set the data for course here 

NSError *executeError = nil; 
if(![managedObjCtx save:&executeError]) { 
     NSLog(@"Failed to save to data store"); 
} 

oluşturmak ve kaydetmek kod olduğunu Kayıtlı MyClass girişlerini okuyabilir. Ancak uygulamayı kapatıp tekrar başlattıktan sonra. Getirilen sonuçlar boş olduğundan MyClassTableViewController boş. SQLiteBrowser kullanarak sqlite dosyasını açtım ve MyClass tablosu boş. MyClass varlıkları sadece önbellekte saklanır ama kalıcı mağazada değil gibi görünüyor. Kaydetmek için RestKit tarafından sağlanan bazı API'ları çağırmalı mıyım? Dokümanı okumayı denedim ama bulamadım. Lütfen yardım et.

- (BOOL)saveToPersistentStore:(NSError **)error 

Evet bu iç içe yönetilen nesne bağlamı işlemek için mantığı var mı: Tom tarafından kurşun

+1

Are you Eğer öyleyse, kaydetmek gerekir? Yuvalanmış yönetilen nesne bağlamları kullanarak veri deposuna kaydedilen değişiklikleri almak için kök içeriği –

+0

hi Tom, giriş için teşekkürler.Kolayın nasıl oluşturulduğunu gösteren soruya bir kod ekledim.RKManagedObjectStore sınıfını bunu yapmak için kullanıyorum ve her zaman manageObjectContext'i aldım. Belki de RestKit iç içe bir şey kullanıyordur.İnce derine inerim.Teşekkürler – Ray

cevap

24

sayesinde, RestKit bir yöntemi vardır NSManagedObjectContext (RKAdditions) sahip olduğu da bulunmuştur. Burada, sadece bir satırlık bir değişiklik çalışır yeni kod, ama doğru kararı :(bulmak için çok zaman aldı

#import "NSManagedObjectContext+RKAdditions.h" 
    NSManagedObjectContext *managedObjCtx = [RKManagedObjectStore defaultStore].mainQueueManagedObjectContext; 
    MyClass* course = [managedObjCtx insertNewObjectForEntityForName:@"MyClass"]; 

    .. set the data for course here 

    NSError *executeError = nil; 
    if(![managedObjCtx saveToPersistentStore:&executeError]) { 
      NSLog(@"Failed to save to data store"); 
    } 
+0

cool .. açıklama için teşekkür ederiz .. – JAHelia

+0

TEŞEKKÜRLER !!!!! Bu kadar her yerde arama için çok fazla zaman harcadı! Teşekkür ederiz! – crojassoto

+0

TEŞEKKÜR EDERİZ. Bu çerçeveyi uzun zamandır kullanıyor ama yine de unutuyoruz. lol –

İlgili konular