NSSearchPathForDirectoriesInDomains gives EXC_BREAKPOINT



我正在制作一个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"

相关内容

最新更新