【发布时间】:2014-05-22 05:57:12
【问题描述】:
谁能解释我在用户退出应用程序时应该执行哪些任务,其中包括与核心数据同步的 rest kit 框架?
在我的应用程序中,我通过以下步骤将其余套件与核心数据同步:
1 我创建了包含实体及其之间关系的核心数据模型。
2 我创建了DateModel 类,其中我创建了shareDataModel 单例以从appDelegate 类设置核心数据。
+ (id)sharedDataModel {
static DateModel *__sharedDataModel = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
__sharedDataModel = [[DateModel alloc] init];
});
return __sharedDataModel;
}
- (NSManagedObjectModel *)managedObjectModel {
return [NSManagedObjectModel mergedModelFromBundles:nil];
}
- (void)setup
{
NSURL *modelURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"AppModel" ofType:@"momd"]];
NSManagedObjectModel *managedObjectModel = [[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL] mutableCopy];
self.objectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSError *error;
_objectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];
[_objectStore createPersistentStoreCoordinator];
NSPersistentStore __unused *persistentStore = [_objectStore addInMemoryPersistentStore:&error];
NSAssert(persistentStore, @"Failed to add persistent store: %@", error);
[self.objectStore createManagedObjectContexts];
[RKManagedObjectStore setDefaultStore:self.objectStore];
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:kBase_URL]];
objectManager.managedObjectStore =_objectStore;
[RKObjectManager setSharedManager:objectManager];
}
3 我创建了 MappingProvider 类,我将服务器中的每个数据库表映射到 RKEntityMapping 对象,如下例所示。
+(RKMapping *)userWearersMapping
{
RKEntityMapping *mapping = [RKEntityMapping mappingForEntityForName:@"UserWearers" inManagedObjectStore:[[DateModel sharedDataModel]objectStore]];
[mapping addAttributeMappingsFromDictionary:@{
@"id": @"userWearer_id",
@"created_at":@"created_at",
@"updated_at":@"updated_at",
@"user_id":@"user_id",
@"wearer_id":@"wearer_id"
}
];
[mapping setIdentificationAttributes:@[@"userWearer_id"]];
return mapping;
}
4 在 AppDelegate 方法:-didFinishLaunchingWithOptions 中,我使用之前在 DateModel 类中创建的单例设置了 coredata sharedModel。
[[DateModel sharedDataModel] setup];
在我的应用程序中,我使用NSFetchedResultsController 在UITableViewControllers 中显示来自服务器的数据。我按照以下步骤操作:
5 在MainViewControler 中我添加了NSFetchRequestController 和NSManagedObjectContext 属性
6 然后在-viewDidLoad 方法中,我从DateModel 类中初始化了NSManagedObjectContext
_managedObjectContext = [[DateModel sharedDataModel]objectStore].mainQueueManagedObjectContext;
7 我实现了NSFetchResultsControllerDelegate 方法:
- (void)controller:(NSFetchedResultsController *)controller didChangeSection:...
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:...
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
- (NSFetchedResultsController *)fetchedResultsController
在我更改用户之前,一切都很好。当新用户登录应用程序时,UITableViewController 显示当前和以前登录用户的数据。
在这种情况下我该怎么办?当用户从我的应用中退出时,我应该进行哪些更改?
【问题讨论】:
标签: ios objective-c core-data restkit nsfetchedresultscontroller