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。真正的问题是我从这篇文章中忽略的其他代码。在玩了更多之后,我开始工作了。

+0

我建议您将答案标记为正确,因为他们确实回答了您的问题。 –

从我的理解,“%@”占位符是对象指针,“长度”返回“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,“%@”是对象指针,所以如果你传递任意数量就会抛出一个内存访问错误。