2017-08-04 93 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