NSSearchPathForDirectoriesInDomains提供EXC_BREAKPOINT

时间:2014-06-16 20:52:41

标签: ios swift nsdocumentdirectory

我正在OS X Yosemite的Xcode 6中使用Swift / Obj-C franken-app。我试图在运行iOS 8的iPod Touch第五代上运行它。

我几天前从我的触摸屏中删除了该应用程序,从那时起它崩溃了EXC_BREAKPOINT我在这里设置了pathArr:

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调用该方法。我没有启用任何断点。我强行清理了项目,删除了应用程序,重新启动了所有内容,但无济于事。

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

调试器在错误的行上显示错误。问题实际上是文件可能(并且在这种情况下不存在)在路径中,您必须确保该文件在使用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
}

答案 1 :(得分:-3)

我认为您需要在文件名之前添加“ / ”,例如

let path = paths[0].stringByAppendingPathComponent("/feeds").

否则文件路径将类似于“/ var / mobile / Containers / Data / Application / 22627F80-D93D-44F6-AB48-B4A3EF709C78 / Documentsfeeds”