【问题标题】: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 在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


    【解决方案1】:

    使用获取请求或关系(或已存储它的属性)获取当前用户,然后从模型中删除该用户。删除规则应配置为将删除级联到用户“拥有”的所有内容,以便将其从系统中清除。

    如果您愿意,您可以保留所有当前用户数据,而是在获取的结果控制器上使用谓词将内容过滤到“新”当前用户。这里要小心,因为当用户退出时,他们可能希望他们的数据被清除,这样其他任何人都无法访问...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多