2017-08-04 94 views
1

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

我试图通过在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

如何解决呢

+0

更改此segue.destinationViewController).receivedData = self.textFieldValueToDispatch.text .intValue;到segue.destinationViewController).receivedData = [self.textFieldValueToDispatch.text intValue]; 并确保您receivedData是int类型 –

回答

0

转换的NSString为Int

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

Converti NG诠释到的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]); 
+0

你的回答是正确的,但如果你编辑你的答案并解释'@(...)'在做什么,它会帮助别人。 – CRD

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

这两种类型都不可互换。

,最简单的解决方案是从NSInteger创建NSNumber对象与ObjC字面

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

@(123)相同[NSNumber numberWithInteger:123]

+0

收到的数据是NSNumber *类型,并且我使用了您的解决方案,并且它不起作用 – user2121

+0

什么不起作用?编译错误?运行时错误?什么错误?当然,只有在文本字段包含数字值的情况下,转换才有效。 – vadian

+0

哦,是我的错误,..它工作 – user2121