我有以下代码:
NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil];
NSString *temp;
for (int i = 0; i < [array count]; i++)
{
temp = [array objectAtIndex:i];
NSLog(@"temp length = %@", [temp length]);
}
我在NSLog行遇到EXC_BAD_ACCESS错误。我认为它在[temp length]位错误。奇怪的是,我可以在temp上使用NSString的其他方法,它们工作得很好,比如[temp characterAtIndex:0]
。
我也尝试过[[array objectAtIndex:i] retain];
,但这似乎没有帮助。
有谁知道我为什么会收到这个错误?
编辑:原来它在NSLog崩溃,因为它是%@而不是%lu。真正的问题是我从这篇文章中省略的其他代码。在玩了一些之后,我开始工作了。
答案 0 :(得分:9)
根据我的理解,“%@”占位符用于对象指针,“length”返回“NSUInteger”,它不是指针。尝试“%lu”而不是“%@”。
答案 1 :(得分:2)
这个(略微清理过的)版本对我有用:
NSError *error = nil;
NSString *path = [@"~/Desktop" stringByExpandingTildeInPath];
NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:
path error:&error];
if (error) NSLog(@"%@", error);
for (NSString *path in array) {
NSLog(@"Path length = %lu", path.length);
}
正如thg435所提到的,“%@”用于对象指针,因此如果你传递一个任意数字,它将引发内存访问错误。