[英]“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"]
是NSNumber
或NSString
實例的情況下工作。
你有兩個問題。 首先, [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.