尝试将字符串输入转换为可设置为实体 int32 属性的整数值时出现问题
Posted
技术标签:
【中文标题】尝试将字符串输入转换为可设置为实体 int32 属性的整数值时出现问题【英文标题】:Having issues when trying to convert string input to an integer value that can be set as an entities int32 attribute 【发布时间】:2016-09-28 17:00:21 【问题描述】:我对 Objective-C 和 ios 开发还很陌生 .当所有属性都只是字符串时,我能够使用核心数据使应用程序运行良好。我的问题发生在我有一个实体(我做了一个测试作为示例),它的属性设置为整数 16 类型(尽管我尝试设置整数 16 和整数 64 并得到完全相同错误)但我似乎无法理解我应该如何将来自用户的字符串输入转换为将被接受为要设置的值的格式。我不断收到相同的错误消息(在 ARC 中不允许将 NSInteger 隐式转换为 IDNullable)和(不兼容的整数到指针转换发送 NSInteger(AKA “long”到 ID Nullable 类型的参数) 例 1: NSManagedObjectContext *context = [self managedObjectContext]; NSManagedObject *newEntity = [NSEntityDescription insertNewObjectForEntityForName:@"TestEntity" inManagedObjectContext:context];
int valueOne = [self.valueOneIn.text intValue];
[newEntity setValue:valueOne forKey:@"value1"]; //!!2 errors listed above
前 2(前编辑):
NSInteger valueOne = [self.valueOneIn.text intValue];
[newEntity setValue:valueOne forKey:@"value1"]; //!!2 errors listed above
ex 3(ex1,刚刚编辑):
NSInteger *valueOne = [self.valueOneIn.text intValue]; //!!error
[newEntity setValue:valueOne forKey:@"value1"]; //!!2 errors listed above
我附上了两张照片,显示了我遇到的错误的简单示例。在过去的几天里,我一直在查找视频、在线课程,甚至阅读一些关于堆栈溢出的可能解决方案,但似乎没有一个可以解决这种情况(我上面的示例是在我尝试使用我找到的潜在解决方案时做出的,但是,大多数涵盖使用核心数据和字符串值或 NSDate 值)。任何朝着正确方向的帮助或轻推都会受到赞赏(我的意思是,我不能强调这一点)[设置为 NSIntegerexample of error with NSInteger
时的错误示例【问题讨论】:
【参考方案1】: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:
将接受 any 对象作为值。子类将告诉编译器哪些对象类型是可接受的,以便编译器可以验证您使用的类型是否正确。
【讨论】:
以上是关于尝试将字符串输入转换为可设置为实体 int32 属性的整数值时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
如何在python中将数组str 32转换为数组int 32