在Person实体内部的核心数据中,我有一个属性phoneNumber
,其类型I已设置为整数64位。在ViewController.m中,文件我正在使用此代码
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:context];
NSManagedObject *newPerson = [[NSManagedObject alloc]initWithEntity:entityDescription insertIntoManagedObjectContext:context];
NSString *numberString = [self.phoneNumber text];
NSInteger phoneNumber = [numberString integerValue];
[newPerson setValue:self.firstName.text forKey:@"firstName"];
[newPerson setValue:self.lastName.text forKey:@"lastName"];
[newPerson setValue:phoneNumber forKey:@"phoneNumber"];
其中firstName,lastName和phoneNumber是文本字段。但最后一行是错误
Implicit conversion of 'NSInteger' (aka 'long') to 'id _Nullable' is disallowed with ARC
如果我使用self.phoneNumber.text
我不认为该值将存储在数据库中,因为该类型存在整数64位。这样做的正确方法是什么?
答案 0 :(得分:2)
在模型中为实体设置attribute
类型为integar32
或integer64
时,在生成模型类时,该属性的类型设置为NSNumber
因此,您应该将值转换为NSNumber
,然后将其设置为模型对象。如下所示。
NSNumber * phoneNumber = [NSNumber numberWithInt:[[self.phoneNumber text] intValue]]] ;
[newPerson setValue: phoneNumber forKey:@"phoneNumber"];
答案 1 :(得分:1)
即使Core Data模型中的值是整数,Person
实体也需要一个数字对象作为电话号码。
首先将整数转换为NSNumber,然后将其分配给人的phoneNumber
属性:
NSNumber *phoneNumber = [NSNumber numberWithInteger:[numberString integerValue]];
[newPerson setValue:phoneNumber forKey:@"phoneNumber"];