【问题标题】:Set value for key in case of NSInteger在 NSInteger 的情况下设置键的值
【发布时间】:2015-09-30 15:13:35
【问题描述】:

我正在尝试使用 setValue:forKey: 在核心数据中设置一个值,但它会引发错误:

(使用未声明的标识符:'newID'}

尝试保存 NSI​​nteger 时。谁能建议正确的语法?

 NSInteger newID = lastID+1;
 [record setValue:newID forKey:@"localid"];//error 

当我尝试 setObject 而不是 setValue 时遇到类似的错误

【问题讨论】:

  • 在尝试将 NSInteger 传递给需要 id 的方法时,您应该会收到错误消息。您不能将 NSInteger 值传递给 setObject:forKey:setValue:forKey:
  • NSInteger(原始数据类型)转换为NSNumber(对象),然后调用setObject:forKey:

标签: ios objective-c core-data setvalue


【解决方案1】:

NSInteger 是原始类型,而不是对象。你应该把它装进一个NSNumber,像这样:

NSInteger newID = lastID+1;
 [record setValue:@(newID) forKey:@"localid"];

你可以像这样转换回来:

NSInteger recordId = [((NSNumber*)[record valueForKey:@"localid"]) integerValue]

【讨论】:

    【解决方案2】:

    你只能设置 NSObject。最简单的方法是

    record [@"localid"] = @(newID);
    

    并且您应该避免使用 setValue:forKey: 和 valueForKey: 并使用 setObject: 和 objectForKey: 或现代语法 - 除非您有充分的理由需要“值”方法。

    【讨论】:

    • 价值调用是 KVC 和与NSManagedObject 的合约的一部分。 OP 应该使用-setObject: forKey:,因为它们是NSDictionary 的一部分,而不是NSManagedObject
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 2014-01-07
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 2010-10-21
    相关资源
    最近更新 更多