NSKeyedUnarchiver.decodeObjectSIGABRT如果原始类未知,将导致崩溃.唯一的解决办法我已经看到醒目从斯威夫特的早期历史这个问题的日期,使用Objective C(也预日期斯威夫特2的实施要求guard,throws,try&catch).我可以找出Objective C的路线 - 但如果可能的话,我更愿意理解一个仅限Swift的解决方案.
例如 - 数据已经编码NSPropertyListFormat.XMLFormat_v1_0.unarchiver.decodeObject()如果编码数据的类未知,则以下代码将失败.
//...
let dat = NSData(contentsOfURL: url)!
let unarchiver = NSKeyedUnarchiver(forReadingWithData: dat)
//it will crash after this if the class in the xml file is not known
if let newListCollection = (unarchiver.decodeObject()) as? List {
return newListCollection
} else {
return nil
}
//...
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种Swift 2唯一的方法来测试数据在尝试之前是否有效.decodeObject- 因为.decodeObject没有throws- 这意味着try- catch似乎不是Swift中的一个选项(方法没有throws …
在我的代码中工作,我返回一个[String]?包含lastPathComponent存储的文件()的名称/Documents/- 按上次修改日期排序.
我相信我可能正在使用太多步骤,我在这里寻求建议如何减少代码.
为了达到目前所需的结果 - 我创建了两个中间词典:var attributesDictionary: [String : AnyObject]?和var urlDictionary = [NSURL:NSDate]().循环初始[NSURL]我使用两个步骤 - .resourceValuesForKeys初始化attributesDictionary.然后我填充,urlDictionary以便它包含URL和键的值NSURLContentModificationDateKey.
我觉得应该有一种方法可以在不创建循环的情况下实现这个结果urlDictionary,attributesDictionary而且不需要循环.也许urlArray直接来自.这是我目前的代码:
编辑:do{}在第一条评论中Arthur Gevorkyan所指出的并不需要.
func getFileList() -> [String]? {
let directory = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
let properties = [NSURLLocalizedNameKey, NSURLCreationDateKey, NSURLContentModificationDateKey, NSURLLocalizedTypeDescriptionKey]
// no catch required - contentsOfDirectoryAtURL returns nil if there is an error
if let urlArray = …Run Code Online (Sandbox Code Playgroud) 我在 Xcode 7.0 beta 6 中使用 Swift 2
长话短说,我正在尝试解决如何设置 .navigationBar.barStyle以及navigationBar.tintColor何时使用文档选择器访问 iCloud——即UIDocumentPickerViewController.
我试过例如:
/...
documentPicker.navigationController!.navigationBar.barStyle = UIBarStyle.Default
documentPicker.navigationController!.navigationBar.tintColor = UIColor.orangeColor()
/...
Run Code Online (Sandbox Code Playgroud)
例如。在这里,我在导航控制器中嵌入了一个视图控制器:
在MyNavigationController我可以设置.barStyle和.tintStyle如下:
class MyNavigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
self.navigationBar.barStyle = UIBarStyle.Default
self.navigationBar.tintColor = UIColor.orangeColor()
}
}
Run Code Online (Sandbox Code Playgroud)
因此,.tintStyle为橙色如下:
iCloud 已启用并FirstViewController符合UIDocumentPickerDelegate. 条形按钮调用IBAction如下代码所示的函数FirstViewController:
class FirstViewController: UIViewController, UIDocumentPickerDelegate {
// ...
@IBAction func importDocument(sender: UIBarButtonItem) {
let documentPicker: UIDocumentPickerViewController …Run Code Online (Sandbox Code Playgroud) 在斯威夫特,我一直在尝试NSXMLParser.总的来说,我对概念和实施充满信心.
因此,我有一个函数myFunc(),它将包含对.parse()方法的调用.
如果该.parse()方法返回false如何使用委托函数直接parser(parser: NSXMLParser, parseErrorOccurred parseError: NSError)返回?我该如何访问错误?parseErrormyFunc()
我知道我可以打印错误.我可以看到我可以将其值赋给具有类级别范围的变量.但我猜是有一个更好的获得它.
func myFunc() {
// ...
myXmlParser!.delegate = self
if myXmlParser!.parse() != true {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
我实现了委托功能
func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
// ...
}
func parser(parser: NSXMLParser, foundCharacters string: String) {
// ...
}
func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: …Run Code Online (Sandbox Code Playgroud)