隐式转换NSNumber *到int

时间:2017-08-04 17:07:48

标签: ios objective-c

我有两个视图控制器VC1和VC2。 VC1有一个textField和按钮。 VC2具有NSNumber *类型的属性。

我试图将VC1中文本字段中的值传递给VC2,所以我在VC1中执行了以下操作

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:SEGUE_IFENTIFIER_TO_DETAILS_VIEW_CONTROLLER]) {

    ((DetailsViewController *)  
    segue.destinationViewController).receivedData =
    self.textFieldValueToDispatch.text.intValue;
}

但收到错误消息:implicit conversion on int_nullable

如何解决它

2 个答案:

答案 0 :(得分:2)

  • NSNumber是一个对象
  • int / NSInteger是原始标量类型

两种类型都不可互换。

最简单的解决方案是使用ObjC文字<{1}}从NSNumber创建一个NSInteger对象

((DetailsViewController *)segue.destinationViewController).receivedData =
                         @(self.textFieldValueToDispatch.text.integerValue);

@(123)[NSNumber numberWithInteger:123]

相同

答案 1 :(得分:0)

将NSString转换为Int

int value = [@"1234" integerValue]; // Int Type

将Int转换为NSNumber

// Using NSNumber methods
NSNumber * number = [NSNumber numberWithInt:1234]; 

// Using NSNumber literals
NSNumber * number = @(1234);

将字符串转换为NSNumber

// Using NSNumber methods
NSNumber * number = [NSNumber numberWithInt:[@"" integerValue]];

// Using NSNumber literals
NSNumber * number = @([@"" integerValue]);

您的解决方案

((DetailsViewController *) segue.destinationViewController).receivedData =
@([self.textFieldValueToDispatch.text integerValue]);