关于 ios:难以从 Core Data 加载整数

Difficulty loading integer from Core Data

我有一个整数存储在我的 core data 中并设置为类型 integer 32。我可以很好地读写 core data 并且文本和日期等一切都很好。但我似乎对整数值有困难。

实体是 Status,我正在尝试检索 lastMessageDate 和 lastMessageID 字段。在这个实体中只会有一个记录。日期检索正常,但整数不检索。

1
2
3
4
5
6
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Status"];
NSError *error = nil;
self.updateStatus = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];

NSDate *lastSavedMessageDate = [[self.updateStatus objectAtIndex:0] lastMessageDate];
NSInteger lastSavedMessageID = [[self.updateStatus objectAtIndex:0] lastMessageID];

检索到的不是实际存储的数字。我想这可能与指针有关,但无论我尝试什么,我似乎都无法获得实际存储的数字。

一个相关的问题是当我试图保存到这个字段时。日期保存得很好,但包括整数保存我得到一个错误:

1
2
3
4
5
6
7
for (NSManagedObject *updatedRecord in [self updateStatus])
{
[updatedRecord setValue:now forKey:@"lastMessageDate"];
[updatedRecord setValue:newMessageID forKey:@"lastMessageID"];
}
NSError *errorUpdate;
[context save:&errorUpdate];

Implicit conversion of 'NSInteger' (aka 'int') to 'id' is disallowed
with ARC

有什么建议吗?


正如其他人所说,您需要使用 NSNumber 这样做的原因是Core Data 只处理整数是原语的对象。当您在 Core Data 实体中填充任何形式的数字值时,它必须是 NSNumber ,使用新的自动装箱功能非常简单。

将 NSNumber 转换为原语就像在对象上调用正确的方法一样简单,在这种情况下它将是 -intValue.