比较时的奇怪行为

时间:2012-01-07 10:42:27

标签: objective-c ios nsmutablearray selector

我有一个函数用于构造数组,方法是检查特定属性是否等于大数据数组中许多对象的特定值。数据数组已完全初始化,但我无法从中检索任何对象。当我浏览代码时,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 个答案:

答案 0 :(得分:2)

目前,您不比较字符串而是参考。 你可以尝试:

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

但我确信它会解决,因为你提到“下面的变量超出了范围”。这是编译错误吗?

答案 1 :(得分:2)

  1. @ Arnaud del 是对的,无法通过比较指针来比较Objective C对象(不同的实例显然有不同的指针值,即使它们具有相同的值)。您应该使用-isEqual:消息按值进行比较。

  2. Variable below is out of scope调试器消息通常是由编译器设置中启用的代码优化引起的,因此编译器会隐式消除您的变量,并且调试器没有机会显示它的值。

    确保您正在调试调试配置,并通过将优化级别设置为无来关闭优化。

相关问题