我正在制作一个Swift/Obj-C弗兰肯应用程序,在OS X Yosemite的Xcode 6中。我试着在iOS 8的第五代iPod Touch上运行它。
几天前我从我的触摸中删除了这个应用程序,从那以后它崩溃了,我在这里设置了pathArr的EXC_BREAKPOINT
:
class func feedURLs() -> NSArray
{
var items = NSMutableArray()
var pathArr: NSArray = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true); // <-- here
var path = pathArr[0].stringByAppendingPathComponent("feeds")
var feeds: NSMutableArray = NSArray(contentsOfFile: path).mutableCopy() as NSMutableArray
for dict : AnyObject in feeds
{
items.addObject(NSURL(string: dict["url"] as NSString))
}
return items
}
我在Xcode中的确切崩溃:
Thread 1: EXC_BREAKPOINT (code=EXC_ARM_BREAKPOINT, subcode=0xe7ffdefe)
该方法最终在(Objective C)视图控制器中从viewDidLoad调用。我没有启用任何断点。我已经强制清理了项目,删除了应用程序,重新启动了所有可以看到的东西,但无济于事。
任何想法?
调试器在错误的行上显示错误。问题实际上是该文件可能(在本例中不存在)存在于路径中,您必须在使用NSArray(contentsOfFile: path)
之前确保该文件存在。
也可以用let
代替var
。
试试这样写:
class func feedURLs() -> NSArray {
var items = NSMutableArray()
let paths: NSArray = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true);
let path = paths[0].stringByAppendingPathComponent("feeds")
if NSFileManager.defaultManager().fileExistsAtPath(path) {
let feeds = NSArray(contentsOfFile: path).mutableCopy() as NSMutableArray
for dict: AnyObject in feeds {
items.addObject(NSURL(string: dict["url"] as NSString))
}
}
return items
}
我觉得你需要在文件名前加上"/",比如
let path = paths[0].stringByAppendingPathComponent("/feeds").
否则文件路径将是类似于"/var/mobile/Containers/Data/Application/22627F80-D93D-44F6-AB48-B4A3EF709C78/Documentsfeeds"