Tôi đang sử dụng RestKit để lấy các đối tượng từ dịch vụ RoR của mình và sử dụng CoreData để duy trì một số đối tượng (các đối tượng bảng tra cứu kiểu tĩnh). TasteTag là một trong những đối tượng được lưu giữ lâu dài:Các thực thể lõi dữ liệu lồng nhau được lưu trữ đã tải xuống NSObjectInaccessibleException
#ifdef RESTKIT_GENERATE_SEED_DB
NSString *seedDatabaseName = nil;
NSString *databaseName = RKDefaultSeedDatabaseFileName;
#else
NSString *seedDatabaseName = RKDefaultSeedDatabaseFileName;
NSString *databaseName = @"Model.sqlite";
#endif
RKObjectManager* manager = [RKObjectManager objectManagerWithBaseURL:kServerURL];
manager.objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:databaseName usingSeedDatabaseName:seedDatabaseName managedObjectModel:nil delegate:self];
.. lots of fun object mapping ..
RKManagedObjectMapping* tasteTagMapping = [RKManagedObjectMapping mappingForClass:[TasteTag class]];
[tasteTagMapping mapKeyPath:@"id" toAttribute:@"tasteTagID"];
[tasteTagMapping mapKeyPath:@"name" toAttribute:@"name"];
tasteTagMapping.primaryKeyAttribute = @"tasteTagID";
[[RKObjectManager sharedManager].mappingProvider setMapping:tasteTagMapping forKeyPath:@"taste_tags"];
[[RKObjectManager sharedManager].mappingProvider addObjectMapping:tasteTagMapping];
.. some more mapping ..
Tôi có dữ liệu quay lại từ máy chủ RoR và nó được ánh xạ tới các đối tượng như mong đợi. Thực thể Core Data cũng dường như ánh xạ tốt sau RestKit được yêu cầu trở lại:
"<TasteTag: 0x6e87170> (entity: TasteTag; id: 0x6e85d60 <x-coredata://03E4A20A-21F2-4A2D-92B4-C4424893D559/TasteTag/p5> ; data: <fault>)"
Vấn đề là khi tôi cố gắng truy cập vào các thuộc tính trên các đối tượng lỗi dường như không thể được hỏa hoạn. Lúc đầu, tôi chỉ kêu gọi các thuộc tính, mà luôn luôn trở lại như con số không (mặc dù phải kích hoạt lỗi):
for (TasteTag *tag in self.vintage.tasteTags) {
[tagNames addObject:tag.name]; //get error of trying to add nil to array
}
Sau khi xem xét lỗi bằng tay kích hoạt (http://www.mlsite.net/blog/?p=518) Tôi đã thử gọi [tag willAccessValueForKey:nil]
mà kết quả trong:
Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0x6e7b060 <x-coredata://03E4A20A-21F2-4A2D-92B4-C4424893D559/TasteTag/p5>''
Tra cứu thực thể trong .sqlite dựa trên khóa (TasteTag/p5) hiển thị bản đồ được ánh xạ tới khóa mà tôi mong đợi.
Các bài đăng khác liên quan đến RestKit khuyên bạn nên tắt bộ nhớ cache đối tượng (mà tôi không sử dụng) vì điều này thường do một thực thể bị xóa. Nhưng ở giai đoạn này tôi chỉ đọc, không xóa, và tôi không có bộ nhớ đệm tại chỗ.
Nếu tôi chỉ gọi [TasteTag allObjects]
Tôi có thể nhận tất cả các đối tượng trở lại tốt và chúng tải mà không gặp sự cố. Nó chỉ là trong trường hợp khi họ bị lỗi có vẻ như.
Hy vọng bạn tìm được giải pháp, tôi đang gặp phải sự cố gần giống. –
@ryan nếu bạn tìm thấy bất cứ điều gì cho tôi biết, cho đến nay tôi đã không có may mắn – Parrots
@ryan - có vẻ như nó có thể không được RestKit cụ thể. Câu hỏi tiếp theo ở đây: http://stackoverflow.com/questions/8856867/copying-objects-with-core-data-objects-in-them – Parrots