2012-09-07 17 views
10

Trong ứng dụng iOS, tôi muốn sử dụng một số NSPersistentStoreCoordinator với cả lớp con NSIncrementalStore, để tìm nạp dữ liệu từ API REST, mà còn với một cửa hàng SQLite, để lưu vào đĩa. Nếu tôi thêm cả hai loại cửa hàng liên tục vào điều phối viên của tôi, tuy nhiên, gọi save: trên ngữ cảnh đối tượng được quản lý của tôi không có hiệu lực. Nếu tôi chỉ thêm một cửa hàng liên tục, không phải loại cho lớp con NSIcrementalStore của tôi, thì lưu sẽ hoạt động như dự định.NSPersistentStoreCoordinator với hai loại cửa hàng liên tục?

Có cách nào để đạt được chức năng này không?

Trả lời

10

Giải pháp tốt nhất trong trải nghiệm của tôi là có nhiều ngữ cảnh đối tượng được quản lý, mỗi ngữ cảnh có mô hình riêng.

Tuy nhiên, có một cách để thực hiện những gì bạn muốn:

// create the store coordinator 
NSPersistentStoreCoordinator *storeCoordinator = [[NSPersistentStoreCoordinator alloc] init]; 
// create the first store 
NSPersistentStore *firstStore = [storeCoordinator addPersistentStoreWithType: NSIncrementalStore configuration:nil URL:urlToFirstStore options:optionsForFirstStore error:&error]; 
// now create the second one 
NSPersistentStore *secondStore = [storeCoordinator addPersistentStoreWithType:NSSQLiteStore configuration:nil URL:urlToSecondStore options:optionsForSecondStore error:&error]; 

// Now you have two stores and one context 
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init]; 
[context setPersistentStoreCoordinator:storeCoordinator]; 

// and you can assign your entities to different stores like this 
NSManagedObject *someObject = [[NSManagedObject alloc] initWithEntity:someEntity insertIntoManagedObjectContext:context]; 
// here the relevant part 
[context assignObject:someObject toPersistentStore:firstStore]; // or secondStore .. 

Bạn cũng nên kiểm tra những liên kết này để có được một ý tưởng tốt hơn về cách thức hoạt động cốt lõi liệu:

Core Data Programming Guide - Persistent Store Coordinator

SO: Two persistent stores for one managed object context - possible?

SO: Can two managed object context share one single persistent store coordinator?

Ngoài ra kiểm tra các bình luận bởi TechZen trong liên kết thứ hai về cấu hình và đọc về nó ở đây:

Core Data Programming Guide - Configurations

và đây là một hướng dẫn tốt đẹp để quản lý hai bối cảnh đối tượng:

Multiple Managed Object Contexts with Core Data

+0

Cảm ơn bạn, tôi đã thiết lập mọi thứ đúng cách nhờ những tài nguyên đó. Tuy nhiên, vẫn còn một câu hỏi: Tôi có nhiều bối cảnh đối tượng được quản lý, nhưng một điều phối viên lưu trữ liên tục duy nhất với hai cửa hàng liên tục. Khi tôi thực hiện một yêu cầu tìm nạp trên ngữ cảnh đối tượng được quản lý chính của mình, tôi chỉ muốn nó được liên kết với lưu trữ liên tục SQLite của tôi, và không sử dụng lớp con NSIncrementalStore của tôi. Làm thế nào để đạt được điều này? –

+0

Có vẻ như đó là '- [NSFetchRequest setAffectedStores:]'. –

+0

@JordanKay Bạn được chào đón. Xin lỗi tôi đã không trả lời câu hỏi của bạn về yêu cầu tìm nạp trước đó, trời nắng và nóng ở đây nên tôi đã tiệc tùng :). Nhưng có vẻ như bạn đã làm đúng! [NSFetchRequest setAffectedStores:] nó là. – iska

Các vấn đề liên quan