核心数据问题 - 无法存储 NSNumber

Posted

技术标签:

【中文标题】核心数据问题 - 无法存储 NSNumber【英文标题】:Core Data Issue - Unable to store NSNumber 【发布时间】:2012-10-20 19:55:56 【问题描述】:

我正在尝试在我的应用程序中使用 Core Data。我想存储一个属性“totalKM”。

为了存储我的属性,我使用这些行:

Model *event = (Model *)[NSEntityDescription insertNewObjectForEntityForName:@"Model" inManagedObjectContext:managedObjectContext];
int number = 4;
[event setTotalKM:[NSNumber numberWithDouble:number]];

要读取我的属性,我使用这些:

Model *event = (Model *)[NSEntityDescription insertNewObjectForEntityForName:@"Model" inManagedObjectContext:managedObjectContext];
NSNumber *number = [event totalKM];

我的属性“totalKM”总是默认值,O。我也不例外。我错过了什么吗?

谢谢。

【问题讨论】:

【参考方案1】:

insertNewObjectForEntityForName此方法用于将模型置于上下文中。

这是一个新对象。

正确的做法是:

设置新的

Model *event = (Model *)[NSEntityDescription insertNewObjectForEntityForName:@"Model" inManagedObjectContext:managedObjectContext];

int number = 4;

[event setTotalKM:[NSNumber numberWithDouble:number]];

//save change if need
NSError *error = nil;

if (![self.manageObjectContext save:&error]) 
    NIDERROR(@"save managedContext error :%@",error);

获取对象进度

当你需要获取模型表单 coredate.u 需要 2 次获取时使用 fetch

喜欢这个圆顶

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Board"
                                    inManagedObjectContext:self.manageObjectContext]];
//set fetch conditions
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"board_id == %@", aBoardID];
[fetchRequest setPredicate:predicate];

NSError *error = nil;

NSArray *results = [self.manageObjectContext executeFetchRequest:fetchRequest error:&error];

if (error) 
    NIDERROR(@"fetch board error.\n board id: %@ \n error:%@", aBoardID, error);
    return nil;


Model *model = results[0];

NSLog(@"%@",model.totalKM)

【讨论】:

以上是关于核心数据问题 - 无法存储 NSNumber的主要内容,如果未能解决你的问题,请参考以下文章

无法将 NSNumber 存储在核心数据中

重置存储时核心数据崩溃:“无法从此 NSManagedObjectContext 的协调器访问对象的持久存储”

核心数据:无法将持久存储添加到协调器

Tableview 中的 Xcode 核心数据

如何将 PHAsset 存储到核心数据中

基于现有核心数据存储创建 RKManagedObjectStore