簡體   English   中英

“指向整數轉換的不兼容指針,使用類型'NSNumber *'的表達式初始化'int'”

[英]“Incompatible pointer to integer conversion initializing 'int' with an expression of type 'NSNumber *'”

我懷疑這確實很簡單,但是我試圖獲取存儲在字典中的整數,而我正在使用的行就是這個。

 int mapX = [NSNumber numberWithInt:[templateObject valueForKey:@"mapX"]];

但這給了我錯誤...

不兼容的指向整數轉換的指針,將“ id”發送到“ int”類型的參數

用整數類型“ NSNumber *”初始化“ int”的整數轉換指針不兼容;

如果我嘗試...

NSNumber *mapX = [NSNumber numberWithInt:[templateObject valueForKey:@"mapX"]];

我基本上得到相同的錯誤。 我知道我可能只是在使用錯誤的語法,但是我不確定該如何寫。

謝謝你的幫助。

要點:

  • [NSNumber numberWithInt:[templateObject valueForKey:@"mapX"]];

    返回一個NSNumber* ,您正嘗試將其存儲在int中。

  • NSNumber* mapX = [NSNumber numberWithInt:[templateObject valueForKey:@"mapX"]];

    也不起作用,因為[templateObject valueForKey:@"mapX"]不是int 您只能將對象存儲為NSDictionary ,而不能存儲為基本類型。

您可能想嘗試一下(假設我的類型正確)

NSNumber* mapXNum = [templateObject valueForKey:@"mapX"];
int mapX = [mapXNum intValue];
 int mapX = (int)[[templateObject valueForKey:@"mapX"] integerValue];

上面的解決方案假定templateObject valueForKey:@“ mapX”返回一個NSNumber。 如果不是,並且您要將其轉換為NSNumber,請改用以下解決方案:

 int mapX = (int)[(NSNumber *)[templateObject valueForKey:@"mapX"] integerValue];

最糟糕的是ObjC中的類型轉換。

int mapX = [NSNumber numberWithInt:[templateObject valueForKey:@"mapX"]];

出於兩個原因(考慮一下)沒有任何意義,但是

NSNumber *mapX = [NSNumber numberWithInt:[[templateObject valueForKey:@"mapX"] intValue]];

應該在[templateObject valueForKey:@"mapX"]NSNumberNSString實例的情況下工作。

你有兩個問題。 首先, [templateObject valueForKey:@"mapX"]返回一個id ,它是一個指向Objective-C對象的指針,而不是一個int 而且,由於-[NSNumber numberWithInt:]方法采用int參數,因此嘗試將id轉換為int是錯誤的。

第二個問題是您嘗試將[NSNumber numberWithInt:...]的結果轉換為int ,這又是相同的問題: -[NSNumber numberWithInt:]返回一個指向NSNumber對象的指針,該指針不是int

假設存儲在字典中的值實際上是一個NSNumber ,那么您真正想要做的是:

NSNumber *mapXObj = [templateObject valueForKey:@"mapX"];  // Implicit cast from id to NSNumber*
int mapX = [mapXObj intValue];

或更簡潔地說:

int mapX = [[templateObject valueForKey:@"mapX"] intValue];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM