Core Data - 个人总结

1. 运用 state 参数 + Notification 以同步保存数据的过程, 因为保存entity是有时间的。例如避免拿到 temporary Id (临时ld)而你可能想得到的是real objectId。 正确的做法是利用Notification监听,保存完毕后更改state进行下一步 (这时候已经确定是 real id)。

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(objectContextDidSave:)
                                                 name:NSManagedObjectContextDidSaveNotification
                                               object:nil;


- (void)objectContextDidSave:(NSNotification*)notification
{
    switch (_currentState) {
        case kState1:
        {
            break;
        }
        case kState2:
        {
            break;
        }
        default:
            break;
    }
}

2. Entity Model,合理利用 Abstract Entity (图中的 DrawEntityBase),其他 Entities 设其为 parent entity。 



3. 合理利用Entity的 ObjectId。(先要确保不是临时ID  - temporary id)。利用 ObjectId 关联数据表,查询上下表数据,这样就不需要自己生成id列。



4. 查询数据的一般方法, 根据要查询的列数据(searchId)搜索并返回按创建时间(createdOn 列)排序后的所有(EntityName表格里的)数据。

+(NSArray*)fetchXXXXXDataForSearchId:(NSString*)searchId
{
    ManagedObjectContext *managedObjectContext = xxxx; // get from your AppDelegate
    __autoreleasing NSError *error = nil;
    NSArray *result = nil;
    
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    [fetchRequest setEntity:[NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:managedObjectContext]];
    [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"entity.xxxId == %@" argumentArray:@[searchId]]];
    fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"createdOn" ascending:YES]]; // sort by created time
    
    result = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
    if (error) {
        NSLog(@"Fatal - Core data error %@",error);
        abort();
    }
    return result;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值