Tôi đang sử dụng RestKit 0.20 để phân tích dữ liệu JSON và lưu vào cơ sở dữ liệu. Đây là một thực thể được ánh xạ SchoolClass, được xử lý bởi RestKit và tiết kiệm tiền phạt. Tôi có một thực thể khác có tên là MyClass, nơi lưu trữ các lớp tôi đã chọn. Cái này chỉ là cục bộ trên thiết bị.iOS RestKit không thể lưu thực thể cục bộ vào cơ sở dữ liệu
Đây là đoạn mã để tạo và lưu các thực thể MyClass
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");
}
Dưới đây là đoạn code mà khởi tạo lưu trữ dữ liệu quản lý
// 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];
Dường như tiết kiệm là thành công và trong MyClasseTableViewController tôi có thể đọc các mục MyClass đã lưu. Tuy nhiên sau khi tôi đóng ứng dụng và khởi động lại. MyClassTableViewController trống, vì các kết quả được tìm nạp trống. Tôi đã mở tệp sqlite bằng cách sử dụng SQLiteBrowser và bảng MyClass trống. Có vẻ như các thực thể MyClass chỉ được lưu trong bộ nhớ cache nhưng không được lưu trong kho lưu trữ liên tục. Tôi có cần phải gọi một số API do RestKit cung cấp để lưu nó không? Tôi đã cố gắng đọc qua tài liệu nhưng không thể tìm thấy nó. Hãy giúp tôi.
Bạn có sử dụng lồng bối cảnh đối tượng được quản lý? Nếu vậy, bạn sẽ cần phải lưu bối cảnh gốc để có được những thay đổi được lưu vào kho dữ liệu –
hi Tom, cảm ơn cho đầu vào.Tôi đã thêm một số mã vào câu hỏi cho thấy cách cửa hàng được tạo ra.Tôi sử dụng lớp RKManagedObjectStore để làm điều đó và luôn nhận được managedObjectContext Có lẽ RestKit đang sử dụng một cái gì đó lồng nhau.Tôi sẽ đào sâu hơn theo dẫn của bạn.Cảm ơn – Ray