CoreData + Restkit 当用户退出应用程序时要执行啥任务?
Posted
技术标签:
【中文标题】CoreData + Restkit 当用户退出应用程序时要执行啥任务?【英文标题】:CoreData + Restkit What task to perform when the user is signing out from the app?CoreData + Restkit 当用户退出应用程序时要执行什么任务? 【发布时间】: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
在UITableViewController
s 中显示来自服务器的数据。我按照以下步骤操作:
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
显示当前和以前登录用户的数据。
在这种情况下我该怎么办?当用户从我的应用中退出时,我应该进行哪些更改?
【问题讨论】:
【参考方案1】:使用获取请求或关系(或已存储它的属性)获取当前用户,然后从模型中删除该用户。删除规则应配置为将删除级联到用户“拥有”的所有内容,以便将其从系统中清除。
如果您愿意,您可以保留所有当前用户数据,而是在获取的结果控制器上使用谓词将内容过滤到“新”当前用户。这里要小心,因为当用户退出时,他们可能希望他们的数据被清除,这样其他任何人都无法访问...
【讨论】:
以上是关于CoreData + Restkit 当用户退出应用程序时要执行啥任务?的主要内容,如果未能解决你的问题,请参考以下文章
RESTkit,Core Data:在将对象传输到 Core Data 之前对其进行处理
当它们没有出现在 JSON 中时,Restkit 删除 Coredata 中的对象
解决RestKit中的CoreData合并冲突,当一个上下文正在保存对象更新而另一个正在删除对象时