2013-08-29 94 views
0

我花了很多小時試圖找到解決方案,所以如果它在這裏某處,我錯過了它,我很抱歉...NSArray,試圖將數組中的對象的索引號傳遞給函數

在.H

@property (nonatomic, strong) NSArray *physicalMan; 
    -(int) getManeuverRating:(int *) value; 

在.M

physicalMan = [[NSArray alloc] initWithObjects:@"Grip-Hold", @"Strike", @"Fall", @"Response", nil]; 

    NSLog(@" The second element is: %@", [physicalMan objectAtIndex:1]); 
    NSLog (@" This is the index location of Grip-Hold: %i", [physicalMan indexOfObject:@"Grip-Hold"]); 

    [self getManeuverRating:[physicalMan indexOfObject:@"Grip-Hold"]]; 
} 

-(int) getManeuverRating:(int *) value 
{ 
    int a = *value; 
    return a + 1; 
} 

的NSLogs做工精細用正確的價值觀,這就是爲什麼我很困惑,爲什麼功能將無法正常工作。 編譯器警告說:「不兼容整數到指針轉換髮送'NSUInteger'(又名'無符號整型')參數的類型'int *'」 我試着刪除*和我試圖找到其他數據類型,並轉換數據類型,我無法獲得任何正確的工作。請幫助或指引我正確的方向......我做錯了什麼?我錯過了什麼?

+0

你爲什麼要通過地址傳遞「價值」? indexOfObject不返回地址。 (是不是編譯器尖叫血腥謀殺呢?) –

+0

可能的重複[在目標C中從整數指針](http://stackoverflow.com/questions/8628279/making-pointer-from-integer-in-jective -c) – Chuck

+0

我原來有int a = value; xcode告訴我添加*,這是錯誤的,我需要將(int *)更改爲(NSUInteger),然後返回* off值,並且所有內容都很好,很開心。 – Hammerhead96

回答

1

indexOfObject:方法NSArray返回NSUInteger,而不是int*。將int傳遞給採用int*的方法不正確:相應內存位置的值無效。

,則應該更換getManeuverRating:方法如下:

-(int) getManeuverRating:(NSUInteger) value 
{ 
    return value + 1; 
} 
+0

事實上,建立和運行工作......謝謝大家的時間和投入。 – Hammerhead96

+1

我已經瞭解到,即使xcode提供了一些不兼容的東西,仍然運行它來查看會發生什麼,如果有的話,我不需要發佈這個問題......現在我該如何關閉此線程? – Hammerhead96

+0

注意,這是NSUInteger,不是NSUinteger ......我需要資本,但這確實是最好的解決方法,謝謝 – Hammerhead96

1

你是不是指向一個int ...你應該讓這個功能

-(NSInteger)getManeuverRating:(NSInteger) value 
{ 
    NSinteger a = value; 
    return a + 1; 
} 

如果是給你的問題,你應該也嘗試在初始功能中施加整數...

因此,而不是

[self getManeuverRating:[physicalMan indexOfObject:@"Grip-Hold"]]; 

NSInteger index = (NSInteger) [physicalMan indexOfObject:@"Grip-Hold"]; 
[self getManeuverRating:index]; 

您應該使用NSInteger的不是int,只是因爲這是件好事在Objective-C的語法來寫。但它只是一個包裝。你也可以讓它接受並返回一個NSUInteger而不是施放它。

另一種現代化的東西,你可以做(​​這是題外話)是聲明您的數組像這樣...

NSArray * physicalMan = @[@"Grip-Hold", @"Strike", @"Fall", @"Response"]; 
+0

我信任編譯器警告,我剛剛做了build + run ...結果它工作正常,只是有那些警告說,他們是不相容的...... – Hammerhead96

+0

@ Hammerhead96 - 我確定編譯器警告你有關SOMETHING。但是你的「修復」是朝着錯誤方向邁出的重要一步。 –

+0

我想出於某種原因,他想要一個整數而不是unsigned int。可能應該假定它是一個無符號整數。 – AdamG