难以将数字值写回核心数据
Difficulty writing number value back to Core Data
我有一个名为 Status 的 Core Data
实体,它有两个属性 savedMessageID 作为 Integer32 和 savedMessageText 作为字符串。
我在应用程序启动时下载的 SQL 数据库中存储了一个字符串。来自数据库的字符串分为 ID 和文本两部分:
NSInteger *newMessageID = [the_ID_as_a_string integerValue];
NSString *newMessageText = the_message_as_a_string;
然后我读取 Core Data 记录并比较 ID 以查看是否有更改。如果下载的 ID 大于存储的 ID,则显示新消息。到目前为止,这工作正常。
然后我尝试用新下载的 ID 写回 Core Data。这就是问题所在……我已经知道这里已经讨论了很多:
NSEntityDescription *entitydesc = [NSEntityDescription entityForName:@"Status" inManagedObjectContext:context];
NSManagedObject *updatedStatus = [[NSManagedObject alloc]initWithEntity:entitydesc insertIntoManagedObjectContext:context];
[updatedStatus setValue:newMessageID forKey:@"savedMessageID"]; //**error line**
[updatedStatus setValue:newMessageText forKey:@"savedMessageText"];
NSError *error;
[context save:&error];
看来我无法将 NSInteger
写回 Core Data
。我尝试编写 NSNumber、int 等,但所有这些都标记了问题。我应该怎么做?
** 我得到的错误是 *使用 ARC[=38 不允许将非 Objective-C 指针隐式转换为 NSInteger *'(又名 'int ')到 'id' =]
你犯了一个错误。 属性 [the_ID_as_a_string integerValue]
returns 整数值,不是指向它的指针。正确的是:
NSInteger newMessageID = [the_ID_as_a_string integerValue];
然后设置值(预期为NSNumber):
[updatedStatus setValue:@(newMessageID) forKey:@"savedMessageID"];
或
[updatedStatus setValue:[NSNumber numberWithInteger:newMessageID] forKey:@"savedMessageID"];
我建议您生成严格的模型以避免类型不匹配(请在此处查看答案 How to create classes after creating Core Data model in Xcode for iPhone)。
我有一个名为 Status 的 Core Data
实体,它有两个属性 savedMessageID 作为 Integer32 和 savedMessageText 作为字符串。
我在应用程序启动时下载的 SQL 数据库中存储了一个字符串。来自数据库的字符串分为 ID 和文本两部分:
NSInteger *newMessageID = [the_ID_as_a_string integerValue];
NSString *newMessageText = the_message_as_a_string;
然后我读取 Core Data 记录并比较 ID 以查看是否有更改。如果下载的 ID 大于存储的 ID,则显示新消息。到目前为止,这工作正常。
然后我尝试用新下载的 ID 写回 Core Data。这就是问题所在……我已经知道这里已经讨论了很多:
NSEntityDescription *entitydesc = [NSEntityDescription entityForName:@"Status" inManagedObjectContext:context];
NSManagedObject *updatedStatus = [[NSManagedObject alloc]initWithEntity:entitydesc insertIntoManagedObjectContext:context];
[updatedStatus setValue:newMessageID forKey:@"savedMessageID"]; //**error line**
[updatedStatus setValue:newMessageText forKey:@"savedMessageText"];
NSError *error;
[context save:&error];
看来我无法将 NSInteger
写回 Core Data
。我尝试编写 NSNumber、int 等,但所有这些都标记了问题。我应该怎么做?
** 我得到的错误是 *使用 ARC[=38 不允许将非 Objective-C 指针隐式转换为 NSInteger *'(又名 'int ')到 'id' =]
你犯了一个错误。 属性 [the_ID_as_a_string integerValue]
returns 整数值,不是指向它的指针。正确的是:
NSInteger newMessageID = [the_ID_as_a_string integerValue];
然后设置值(预期为NSNumber):
[updatedStatus setValue:@(newMessageID) forKey:@"savedMessageID"];
或
[updatedStatus setValue:[NSNumber numberWithInteger:newMessageID] forKey:@"savedMessageID"];
我建议您生成严格的模型以避免类型不匹配(请在此处查看答案 How to create classes after creating Core Data model in Xcode for iPhone)。