Tôi cũng bối rối trong khoảng 4 hoặc 5 giờ :) Vì vậy, Lớp NSPersistentStore kế thừa của bạn là "đại diện" của bộ nhớ dữ liệu từ xa của bạn.
Vì vậy, cho truy cập dữ liệu từ xa và tiết kiệm/bộ nhớ đệm nó tại địa phương bạn cần phải làm như sau
1) Tạo lớp con của NSPersistentStore và cài đặt nó.
Giống như rằng:
YOURIncrementalStore *incrementalStore = [coordinator addPersistentStoreWithType:[YOURIncrementalStore type] configuration:nil URL:nil options:nil error:&error];
nơi điều phối NSPersistentStoreCoordinator chính của bạn
2) Sau đó, bạn cần NSPersistentStoreCoordinator khác, mà sẽ "phối hợp đại diện địa phương (incrementalStore) và bối cảnh của việc lưu trữ bên ngoài" và cung cấp đại diện lưu trữ cục bộ của bạn (như URL DB SQLite) cho nó:
[incrementalStore.backingPersistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]
Nhưng đừng quên rằng cửa hàng bền vững mới của bạn phải biết tất cả trước đó trạng thái cục bộ trước đó của bạn. Vì vậy, lựa chọn dict sẽ là:
NSDictionary *options = @{ NSInferMappingModelAutomaticallyOption : @YES, NSMigratePersistentStoresAutomaticallyOption:@YES }
Vì vậy, IMHO, tôi hiểu tất cả các công việc nội bộ theo cách này:
Bạn yêu cầu một số dữ liệu từ API bên ngoài. Phân tích cú pháp nó, sau đó lưu vào ngữ cảnh của trình sao lưuPersistentStoreCoordinator của bạn, sau đó nhập vào chính tệp.Vì vậy, các trạng thái của tất cả các bối cảnh sẽ bằng nhau.
Tất cả văn bản trước đó dựa trên công việc với giải pháp AFIncrementalStore.
Mã của tôi để thực hiện AFIncrementalStore với MagicalRecord:
- (void)addMRAndAFIS {
[MagicalRecord setupCoreDataStack];
NSURL *storeURL = [NSPersistentStore urlForStoreName:[MagicalRecord defaultStoreName]];
NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator defaultStoreCoordinator];
NSError *error = nil;
NSArray *arr = coordinator.persistentStores;
AFIncrementalStore *incrementalStore = (AFIncrementalStore*)[coordinator addPersistentStoreWithType:[PTIncrementalStore type] configuration:nil URL:nil options:nil error:&error];
NSDictionary *options = @{ NSInferMappingModelAutomaticallyOption : @YES,
NSMigratePersistentStoresAutomaticallyOption:@YES };
arr = coordinator.persistentStores;
if (![incrementalStore.backingPersistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
Nếu chúng ta cần phải thảo luận về Cách đơn giản nhất, bạn không cần chỉ phân lớp NSIncrementalStore, thiết lập một cách chính xác (như tôi đã viết), phân tích dữ liệu, sau đó tạo ra một số bối cảnh, lưu ngày vào nó, sau đó lưu nó và hợp nhất với bối cảnh cha mẹ.
Vì vậy, bạn sẽ có 2 Cửa hàng và 2 bối cảnh và 1 StoreCoordinator.
Nếu tôi đã phạm sai lầm ở đâu đó, vui lòng tham khảo.
CSONG, hãy thử: https://gist.github.com/stevederico/5316737
Tôi đã bắt đầu triển khai lớp con của riêng mình. Tôi sẽ đăng nó sớm như là mã nguồn mở, hãy theo dõi. : D – wczekalski
Vì vậy, những gì? Bạn có nhận được những gì bạn muốn? –
Tôi vẫn đang làm nhưng tôi sẽ sớm kết thúc. Nó sẽ có sẵn trên github của tôi - github.com/wczekalski – wczekalski