2012-01-07 2 views
0

У меня есть функция, которую я использую для построения массива, проверяя, является ли конкретное свойство равным определенному значению объекта среди многих в большом массиве данных. Массив данных полностью инициализирован, но я не могу извлечь из него какие-либо объекты. Когда я просматриваю код, XCode сообщает мне, что переменная «вещь» ниже находится вне области видимости.Странное поведение при сравнении

Это ошибка из-за моей функции или проблема с массивом данных? (Я проверил массив данных независимо, и у него есть правильный счет и правильные члены).

- (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

Я имел в виду * NOT * конечно. –

+3

Вы можете отредактировать свой ответ, затем – iHunter

+0

Это помогло, но не решило мои проблемы, я понял, что проблема с моим массивом данных, см. Мой вопрос здесь: http://stackoverflow.com/questions/8774602/how-to-keep- а-переменный в памяти, до самого приложения-квиты –

2
  1. @Arnaud дель прав, Объективные объекты C не могут быть сопоставлены с помощью сравнения указателей к ним (разные экземпляры, очевидно, имеют разные значения указателей, даже если они имеют то же значение). Вы должны использовать сообщение -isEqual:, чтобы сравнить их по значению.

  2. Variable below is out of scope сообщение отладчика часто вызвано оптимизацией кода, включенной в настройках компилятора, поэтому ваша переменная неявно уничтожается компилятором, и отладчик не имеет возможности показать ее значение.

    Убедитесь, что вы отладкой конфигурации отладки и у вас есть оптимизации выключены, установив уровень Optimization Нет.

Смежные вопросы