在 Swift Playground 中创建 UIManagedDocument - 信号 SIGABRT 错误

Posted

技术标签:

【中文标题】在 Swift Playground 中创建 UIManagedDocument - 信号 SIGABRT 错误【英文标题】:Creating a UIManagedDocument in Swift Playground - signal SIGABRT error 【发布时间】:2014-09-30 11:15:27 【问题描述】:

我不熟悉编码并尝试构建我的第一个应用程序。

我正在尝试按照去年的 CS193 Standford ios 课程第 12 讲中概述的步骤使用 Swift Playgrounds 创建一个 UIManagedDocument。它们在目标 C 中,我正在尝试将它们转换为 Swift。我花了一整天的时间把头撞在墙上,试图找出我做错了什么:/

import UIKit
import CoreData


let fileManager = NSFileManager.defaultManager()
let directoryArray = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
let directoryUrl = directoryArray[0] as NSURL
let documentName = "MyDocument"
let url:NSURL = directoryUrl.URLByAppendingPathComponent(documentName)
var document = UIManagedDocument(fileURL: url)
var path:NSString = url.path!
println(path)

let context:NSManagedObjectContext = document.managedObjectContext

//document.openWithCompletionHandler(nil)


var fileExists = fileManager.fileExistsAtPath(path)

document.fileURL


document.saveToURL(url, forSaveOperation: UIDocumentSaveOperation.ForCreating, completionHandler: nil)

我收到一条错误消息,提示“执行被中断,原因:信号 SIGABRT”。控制台输出似乎表明我创建的 URL 有问题,或者它是 nil,但我不确定为什么会这样。

/var/folders/tc/9f9rjh1d0pn2r1qbg4qhqbqw0000gn/T/com.apple.dt.Xcode.pg/containers/com.apple.dt.playground.stub.iOS_Simulator.MyPlayground-CB14C6DC-51ED-4C53-987E-4616DD3A09FA/Documents/MyDocument
2014-09-30 20:50:18.648 MyPlayground[11196:3191065] failed to get type for URL (file:///var/folders/tc/9f9rjh1d0pn2r1qbg4qhqbqw0000gn/T/com.apple.dt.Xcode.pg/containers/com.apple.dt.playground.stub.iOS_Simulator.MyPlayground-CB14C6DC-51ED-4C53-987E-4616DD3A09FA/Documents/MyDocument) error: The operation couldn’t be completed. (Cocoa error 260.)
2014-09-30 20:50:18.648 MyPlayground[11196:3191065] failed to get type for URL (file:///var/folders/tc/9f9rjh1d0pn2r1qbg4qhqbqw0000gn/T/com.apple.dt.Xcode.pg/containers/com.apple.dt.playground.stub.iOS_Simulator.MyPlayground-CB14C6DC-51ED-4C53-987E-4616DD3A09FA/Documents/MyDocument) error: The operation couldn’t be completed. (Cocoa error 260.)
2014-09-30 20:50:18.649 MyPlayground[11196:3191065] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL URLByAppendingPathExtension:]: component, components, or pathExtension cannot be nil.'
*** First throw call stack:
(
    0   CoreFoundation                      0x00000001016bf3f5 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x00000001031cabb7 objc_exception_throw + 45
    2   CoreFoundation                      0x00000001016bf32d +[NSException raise:format:] + 205
    3   Foundation                          0x00000001010ef39f -[NSURL(NSURLPathUtilities) URLByAppendingPathExtension:] + 78
    4   UIKit                               0x000000010201240d -[UIDocument saveToURL:forSaveOperation:completionHandler:] + 151
    5   ???                                 0x000000010cf2904c 0x0 + 4512190540
)
libc++abi.dylib: terminating with uncaught exception of type NSException

在操场上我觉得我创建的网址不是零,所以我真的迷路了。

非常感谢任何帮助或建议 :) 非常感谢!

【问题讨论】:

【参考方案1】:

在此示例中,UIManagedDocument 没有可以传递给持久存储的模型配置。 UIManagedDocument 的文档说:“文档对象然后创建一个核心数据堆栈,用于使用应用程序主包中的托管对象模型访问文档的持久存储。”但在这种情况下,没有主包,也找不到对象模型。您也许可以在操场内构建所有这些,但我不知道该怎么做。因此,这可能只是 Playground 的限制,不允许您在那里尝试。

【讨论】:

以上是关于在 Swift Playground 中创建 UIManagedDocument - 信号 SIGABRT 错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode 8/Swift 3 中创建 iOS liveView [重复]

如何在 swift 中创建新闻提要 UI

在 Swift 4 中创建类的非零属性数组

如何使用 Swift 3 Playground 读取 Resources 目录中的文本文件?

在 swift ui 中创建 Json 数组

在 Swift UI/Xcode 中创建导航链接错误