Objective c 从NSOpenPanel读取URL会导致SIGABRT崩溃
此代码与SIGABRT一起崩溃:Objective c 从NSOpenPanel读取URL会导致SIGABRT崩溃,objective-c,xcode,macos,Objective C,Xcode,Macos,此代码与SIGABRT一起崩溃: NSOpenPanel *openPanel = [NSOpenPanel openPanel]; [openPanel runModalForTypes:nil]; NSArray* URLs = [openPanel URLs]; for (NSString* item in URLs) { NSLog(item); // here it crashes with SIGABRT } 我看不出代码有什么问题,但我是Objective-C的初学者。
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel runModalForTypes:nil];
NSArray* URLs = [openPanel URLs];
for (NSString* item in URLs)
{
NSLog(item); // here it crashes with SIGABRT
}
我看不出代码有什么问题,但我是Objective-C的初学者。试着为(NSURL*url-in-url)做。由于某些原因,您错误地使用了NSString
另外,您应该这样记录:NSLog(@“%@”,url)代码>这是您应该使用的方法。您不应该将对象直接传递给NSLog
是的,这似乎就是问题所在。我可能会使用NSLog(@“%@,[url path])
@enchilada谢谢你的回答,我的代码现在很好用!但是来自C++的我会想到编译错误,在Objy-C中没有指针类型检查吗?当然,有指针类型检查。您最初没有收到编译时警告,因为NSLog确实需要字符串,并且您之前编写了“NSString*item”,所以没有收到任何警告。不过,你应该得到一个带有“NSURL*url”的警告。但我认为在这两种情况下,当您将一个对象直接传递到NSLog时,您应该得到某种警告。我似乎记得看到过这样的警告。可能这取决于编译器设置。