2012-01-07 166 views
0

我有一個函數用於構造一個數組,通過檢查某個特定屬性是否等於某個大型數據數組中某個對象的特定值。數據數組已完全初始化,但我無法從中檢索任何對象。當我瀏覽代碼時,XCode告訴我,下面的「thing」變量超出了範圍。進行比較時出現奇怪行爲

這是一個錯誤,由於我的功能或是數據陣列的問題? (我獨立地檢查了數據數組,它有正確的計數和正確的成員)。

- (NSMutableArray *)parseForProperty:(NSString*)property EqualTo:(NSString*)value 

{ 
    NSMutableArray *result = [[NSMutableArray alloc] init]; 

    SEL selector = NSSelectorFromString(property); 

    NSLog(@"parseProp"); 

    for (RCDetailItem *thing in [[self defaultStore] parsedData]) 
    { 
     NSLog(@"Thing Title: %@", thing.title); 
     if ([thing performSelector:selector] == value) 
     { 
      [result addObject:thing]; 
     } 
    } 
    return result; 
} 

回答

2

目前,您不會比較字符串,而是參考。 你可以試試:

NSString * thingProperty = [thing performSelector:selector]; 
if ([thingProperty isEqualToString:value]) 
.. 

但我敢肯定它會解決,因爲你是指「的變量超出範圍」。這是一個編譯錯誤?

+0

我的意思是*不*確定。 – 2012-01-07 11:26:14

+3

你可以編輯你的答案然後 – iHunter 2012-01-07 12:47:12

+0

這幫助,但沒有解決我的問題,我意識到麻煩與我的數據數組,看到我的問題在這裏:http://stackoverflow.com/questions/8774602/how-to-keep-一個可變-內存-直到最APP-退出 – 2012-01-08 01:18:55

2
  1. @阿諾德爾是正確的,目標C的對象不能由指針比較他們(不同的實例顯然有不同的指針值,即使它們具有相同的值)進行比較。您應該使用-isEqual:消息按值進行比較。

  2. Variable below is out of scope調試器消息通常是由編譯器設置中啓用的代碼優化引起的,因此您的變量被編譯器隱式清除,調試器沒有機會顯示它的值。

    確保您正在調試調試配置,你有優化關閉由優化級別設置爲無。