在 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 [重复]