Objective c 尝试将字符串输入转换为可设置为entities int32属性的整数值时出现问题

Objective c 尝试将字符串输入转换为可设置为entities int32属性的整数值时出现问题,objective-c,core-data,Objective C,Core Data,我对Objective-C和iOS开发还是相当陌生的 . 当所有属性都是字符串时,我能够使应用程序在核心数据下正常运行。当我有一个实体(我做了一个测试以显示为例)的属性设置为integer 16类型时,就会出现问题(尽管我尝试设置integer 16和integer 64,但得到了完全相同的错误)但我似乎无法理解如何将用户输入的字符串转换为一种格式,该格式将被接受为要设置的值。我一直收到相同的错误消息(在ARC中不允许将NSInteger隐式转换为IDNullable)&(不兼容的整数到指针转换

我对Objective-C和iOS开发还是相当陌生的 . 当所有属性都是字符串时,我能够使应用程序在核心数据下正常运行。当我有一个实体(我做了一个测试以显示为例)的属性设置为integer 16类型时,就会出现问题(尽管我尝试设置integer 16和integer 64,但得到了完全相同的错误)但我似乎无法理解如何将用户输入的字符串转换为一种格式,该格式将被接受为要设置的值。我一直收到相同的错误消息(在ARC中不允许将NSInteger隐式转换为IDNullable)&(不兼容的整数到指针转换发送NSInteger(也称为“long”到ID Nullable类型的参数) 例1: NSManagedObjectContext*上下文=[self-managedObjectContext]; NSManagedObject*newEntity=[NSEntityDescription insertNewObjectForEntityForName:@“TestEntity”在ManagedObjectContext:context中]

int valueOne = [self.valueOneIn.text intValue]; 

[newEntity setValue:valueOne forKey:@"value1"]; //!!2 errors listed above
ex 2(以上已编辑):

例3(例1,刚刚编辑):


我附上了两张照片,展示了我所遇到的错误的简单例子。我花了几天时间查找视频、在线课程,甚至阅读了一些关于堆栈溢出的可能解决方案,但似乎没有一张能够解决这种情况(我上面的例子是在尝试使用我找到的潜在解决方案时给出的,但大多数都涉及到使用核心数据和字符串值或NSDate值)。任何朝着正确方向的帮助或推动都将非常感谢(我的意思是,我强调得太多了)[设置为NSInteger时的错误示例设置值:forKey:方法需要一个对象作为值。但是
int
NSInteger
是基本的数字类型,而不是对象。这就是前两个示例不起作用的原因。第三个示例不起作用,因为指向
NSInteger
的指针仍然不是对象t

假设
valueOneIn
是一个文本字段,您应该执行以下操作:

NSInteger valueOne = [self.valueOneIn.text integerValue];
[newEntity setValue:@(valueOne) forKey:@"value1"];
@(valueOne)
语法告诉编译器将
NSInteger
变量
valueOne
转换为
NSNumber
的实例。这是一个设计用于在需要对象时包装数值的类,因此这是
setValue:forKey:
所需的。另外,请注意,代码使用
integerValue
而不是
intValue
--哪一个更好,因为编译器将根据目标平台使用正确的整数大小


与直接使用
NSManagedObject
相比,为实体使用自定义
NSManagedObject
子类更好。一个主要优点是
setValue:forKey:
将接受任何对象作为值。子类将告诉编译器哪些对象类型是可接受的,以便编译器可以验证您是否正确重新使用正确的类型。

方法
setValue:forKey:
希望对象作为值。但是
int
NSInteger
是基本的数字类型,而不是对象。这就是前两个示例不起作用的原因。第三个示例不起作用,因为指向
NSInteger
的指针仍然不是对象

假设
valueOneIn
是一个文本字段,您应该执行以下操作:

NSInteger valueOne = [self.valueOneIn.text integerValue];
[newEntity setValue:@(valueOne) forKey:@"value1"];
@(valueOne)
语法告诉编译器将
NSInteger
变量
valueOne
转换为
NSNumber
的实例。这是一个设计用于在需要对象时包装数值的类,因此这是
setValue:forKey:
所需的。另外,请注意,代码使用
integerValue
而不是
intValue
--哪一个更好,因为编译器将根据目标平台使用正确的整数大小

与直接使用
NSManagedObject
相比,为实体使用自定义
NSManagedObject
子类更好。一个主要优点是
setValue:forKey:
将接受任何对象作为值。子类将告诉编译器哪些对象类型是可接受的,以便编译器可以验证您是否正确重新使用正确的类型

NSInteger valueOne = [self.valueOneIn.text integerValue];
[newEntity setValue:@(valueOne) forKey:@"value1"];