我看到一些类似的问题,但没有简单的答案。在我真正使用它们之前,我只是在玩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方法工作都很好。我不明白为什么这不起作用,非常感谢一些帮助。谢谢!
答案 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。