【问题标题】:Share Extension Crash on reading Array from CoreData从 CoreData 读取数组时共享扩展崩溃
【发布时间】:2015-03-03 02:41:57
【问题描述】:

当我尝试访问填充了 CoreData 数据的数组时。我收到 EXC_BAD_ACCESS 错误。

这是我的代码:

var endPointList: Array<SettingsModel> = []

override func viewDidLoad() {

    var context = getManagedObjectContext()

    let fetchRequest = NSFetchRequest(entityName: "SettingsEndpoint")
    endPointList = context.executeFetchRequest(fetchRequest, error: nil) as [SettingsModel]

}

当我按下触发以下 IBAction 的按钮时出现错误:

@IBAction func showEndPointAlert(){
    let alertController = UIAlertController(title: "Endpunkte Auswahl", message: "Wählen sie einen Endpunkt", preferredStyle: .Alert)


    for endPoint : SettingsModel in endPointList {
         var endPointNameFromData:String = endPoint.name as String
    }

    let cancelAction = UIAlertAction(title: "Abbrechen", style: .Cancel) { (_) in }
    alertController.addAction(cancelAction)

    self.presentViewController(alertController, animated: true, completion:nil );
}

调试器指向以下行:

var endPointNameFromData:String = endPoint.name as String

奇怪的是,如果我在它运行的 viewDidLoad() 方法中执行此代码。这是为什么呢?

更新:

现在来自 Mundi 的一些编辑。我得到一个稍微不同的错误:

2015-01-06 12:18:21.818 ShareExtension[1056:20857] 
-[SettingsModel name]: unrecognized selector sent to instance 0x6080000b2fc0
2015-01-06 12:20:24.755 ShareExtension[1056:20857] 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '
-[SettingsModel name]: unrecognized selector sent to instance 0x6080000b2fc0'

我的 SettingsModel 类:

import UIKit
import CoreData

@objc(SettingsModel)
class SettingsModel: NSManagedObject {

    @NSManaged var name:String
    @NSManaged var webservice:String
    @NSManaged var service:String

}  

【问题讨论】:

  • 中断时的调试器消息是什么?

标签: ios xcode core-data swift share


【解决方案1】:

从 Core Data 获取时,您通常需要将结果转换为正确的类型。仅仅声明某种类型的变量是不够的。

最好不要使用AnyObject,而是使用适当的NSManagedObject 子类。

endPointList = context.executeFetchRequest(fetchRequest, error: nil) as [EndPoint]
for endPoint : EndPoint in endPointList {
   println(endpoint.name)
}

【讨论】:

  • 它仍然在 println 处中断。不过谢谢你的建议。
  • 您阅读了您的错误信息吗?它说你的子类必须有一个字符串属性name。这确实是您应该发现的一个不同的基本错误。您应该接受答案,因为它解决了您提出的问题。
  • 我的子类确实有一个名为 name 的字符串属性
  • 这意味着您分配给变量的对象不是SettingsModel类型。 顺便说一句:“SettingsModel”不是一个很好的名字。试试“设置”。
  • 代码在不同的地方工作。但不在 IBAction 中。这意味着类型是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-16
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多