1

大家好,我已经用 iOS5 构建了几个应用程序,现在我将深入研究 CoreData。什么是正确的方法?很多指南是指旧的 XCode 版本,在项目创建向导中,开发人员可以选择“使用 CoreData”。这样,您将自动获得对 NSManagedObjectContext 的引用。看来这个选项已经不存在了。所以现在怎么办?我已经阅读了 UIManagedDocument,但我不明白它是如何关联的:persistentStoreCoordinator、managedObjectModel、managedObjectContext。此外,我需要使用 RestKit 完成所有这些工作,这增加了对正确方法的困惑。我需要有人解释或指出正确的方向。谢谢

4

2 回答 2

1

用户1170896,

使用 Xcode 4.5 中的 master-detail 项目,您可以选择 Core Data 选项并获取其所有样板代码。

安德鲁

于 2012-11-17T15:44:09.367 回答
1

1 个月前刚开始使用 RestKit / Core Data。我阅读了很多教程,以或多或少地熟悉这些东西。我读过的最好的教程之一是:http: //mobile.tutsplus.com/tutorials/iphone/advanced-restkit-development_iphone-sdk/

在使用 RestKit 时,例如在 Master-Detail-View 项目模板中创建新项目时的“使用核心数据”选项没有意义。例如 NSPersistentStoreCoordinator 由 RKManagedObjectStore 管理。NSManagedObjectContext 在后台自动创建。请参阅附加的示例代码以了解它是如何工作的。

一个简单的 RestKit 设置如下所示:

objectManager = [RKObjectManager managerWithBaseURLString:@"http://x.y.z.a"];

NSString *databaseName = @"XYZ.sqlite";
managedObjectStore = [RKManagedObjectStore objectStoreWithStoreFilename:databaseName];
objectManager.objectStore = managedObjectStore;

RKManagedObjectMapping *customerMapping = [RKManagedObjectMapping mappingForClass:[Customer class] inManagedObjectStore:objectManager.objectStore];
[customerMapping mapKeyPathsToAttributes:@"Id", @"customerid", nil];
[customerMapping mapKeyPathsToAttributes:@"Name", @"name", nil];
[customerMapping mapKeyPathsToAttributes:@"Firstname", @"firstname", nil];
customerMapping.primaryKeyAttribute = @"customerid";

//[other mappings incl. relationships]

[objectManager.mappingProvider setObjectMapping:reservationMapping forResourcePathPattern:@"/api/xyz"];

可以通过 NSFetechedResultsController 访问存储在 Core Data 中的数据:

NSFetchedResultsController *fetchedResultsController;
fetchedResultsController = [Customer fetchAllSortedBy:@"firstname" ascending:YES withPredicate:nil groupBy:@"firstname"];
fetchedResultsController.delegate = self;
于 2012-11-19T10:35:53.000 回答