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];

在我的应用程序中,我使用NSFetchedResultsControllerUITableViewControllers 中显示来自服务器的数据。我按照以下步骤操作:

5 在MainViewControler 中我添加了NSFetchRequestControllerNSManagedObjectContext 属性

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合并冲突,当一个上下文正在保存对象更新而另一个正在删除对象时

RestKit + CoreData,理解 RKManagedObjectRequestOperation

CoreData 和 RestKit

Restkit编辑插入coredata