NSMutableArray的count方法导致错误的访问错误?

时间:2011-06-18 20:42:35

标签: iphone objective-c ios nsmutablearray nslog

我看到一些类似的问题,但没有简单的答案。在我真正使用它们之前,我只是在玩NSMutableArray来感受它们。出于某种原因,当我尝试在数组上调用count时,它给出了一个EXC_BAD_ACCESS错误,我无法弄清楚原因。

    - (void) applicationDidFinishLaunching:(UIApplication*)application 
{   
    // Create window and make key
    _window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [_window makeKeyAndVisible];

    NSMutableArray* test = [[NSMutableArray alloc] initWithObjects:[NSString stringWithFormat:@"first!"], [NSString stringWithFormat:@"second!"], nil];
    [test insertObject:[NSString stringWithFormat:@"inserted"] atIndex:0];
    NSLog(@"%@", [test objectAtIndex:0]);
    NSLog(@"%@", [test objectAtIndex:1]);
    NSLog(@"%@", [test objectAtIndex:2]);
    NSLog(@"%@", [test count]); //bad access here
}

所有插入和访问除了count方法工作都很好。我不明白为什么这不起作用,非常感谢一些帮助。谢谢!

4 个答案:

答案 0 :(得分:8)

%@格式说明符打印对象。 -count的返回值只是一个无符号整数。您应该为该类型使用格式说明符%u

答案 1 :(得分:2)

问题是[test count]返回NSUInteger而不是指针(到NSObject)。试试这个:

NSLog(@"%u", [test count]);

请注意,使用%d也有效,但首选%u

答案 2 :(得分:1)

- (NSUInteger)count;会返回NSUInteger

请改用:

NSLog(@"%u", [test count]); //bad access here

答案 3 :(得分:0)

count工作得很好。但它会返回NSUInteger原语,而不是指向NSObject子类的指针。 %@字符串格式化程序需要指向一个对象,并记录从该对象的NSString方法返回的-description。当你传递它时,NSUInteger NSLog会认为它是一个对象指针并且尽职地尝试向内存地址3发送-description消息,这会导致EXEC_BAD_ACCESS。