NSString.length给EXC_BAD_ACCESS
问题描述:
我有以下代码:NSString.length给EXC_BAD_ACCESS
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错误。我认为它在[临时长度]位错误。奇怪的是,我可以在临时做NSString的其他方法,并且它们工作正常,如[temp characterAtIndex:0]
。
我也试过做[[array objectAtIndex:i] retain];
,但这似乎没有帮助。
有谁知道我为什么得到这个错误?
编辑︰原来它是在NSLog崩溃,因为它是%@而不是%lu。真正的问题是我从这篇文章中忽略的其他代码。在玩了更多之后,我开始工作了。
答
从我的理解,“%@”占位符是对象指针,“长度”返回“NSUInteger”这不是一个指针。尝试使用“%lu”而不是“%@”。
+0
这并没有解决它......但有趣的是,它使错误发生在函数调用的地方,而不是实际上在线本身。 Xcode也建议使用%lu而不是%d,但两者都做同样的事情。 – Cole
答
这(略清理)版本为我工作:
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,“%@”是对象指针,所以如果你传递任意数量就会抛出一个内存访问错误。
我建议您将答案标记为正确,因为他们确实回答了您的问题。 –