2015-02-05 36 views
2

我收到了一些使用Swift的错误,并且当我尝试了其他Stack Overflow帖子中列出的解决方案时,我收到了其他错误。第一个错误我得到的是 NSForwarding:警告:类“h2.Items”不实现methodSignatureForSelector对象0x7dc4ca30: - 麻烦了 无法识别的选择 - [h2.Items的initWithCoder:]为什么会有未捕获的异常?

那么我已经更新了我代码添加“NSObject”,当我这样做时,我得到以下错误:

终止应用程序由于未捕获的异常'NSInvalidArgumentException',原因:' - [h2.Items initWithCoder:]:无法识别的选择器发送到实例0x79069250'

我不确定该从哪里出发。我一直在下面的http://shrikar.com/blog/2015/01/17/uitableview-and-uitableviewcell-customization-in-swift/

教程,并试图从Got Unrecognized selector -replacementObjectForKeyedArchiver: crash when implementing NSCoding in Swift

没有人有任何其他建议解决方法?

我的代码是:

import CloudKit 
import UIKit 
import Foundation 

class Items: NSObject 
{ 
    class Entry 
    { 
     var filename : String 
     init(fname : String) 
     { 
      self.filename = fname 
     } 
    } 

    var pics = [ 
     Entry(fname: "circle.png") 
    ] 
} 

这里是正在调用类的代码:

var items = Items() 

override func viewDidLoad() { 
    super.viewDidLoad() 
} 


override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 

    return 1 
} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return items.pics.count 
} 


override func tableView(tableVIew: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as TableViewCell 

    let entry = items.pics[indexPath.row] 
    let image = UIImage(named: entry.filename) 
    cell.anotherSelfie.image = image 


    return cell 
} 

}

,这里是该小区的代码:

class TableViewCell: UITableViewCell { 

@IBOutlet var anotherSelfie: UIImageView! 


override func awakeFromNib() { 
    super.awakeFromNib() 

} 

override func setSelected(selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 
} 


     } 
+0

您应该显示出现这些错误的代码。 – 2015-02-05 18:20:39

+0

这是针对Objective-C的,但它解释了无法识别的选择器异常:http://stackoverflow.com/questions/25853947/how-can-i-debug-unrecognized-selector-sent-to-instance-error – 2015-02-05 18:23:41

+0

您定义'Items'作为符合'NSObject'协议的类,这并不意味着它是NSObject。事实上,你在'Items'定义中定义了另一个类型。 NSObjects不能在其定义中定义其他类...以及函数,结构体,枚举。可能这是你问题的根源。 – 2015-02-05 18:58:10

回答

2

这里没有什么东西这会导致你描述的错误。我用你的代码,即使没有NSObject参考,它工作正常。问题在于其他地方。

还有一些事情还没有与我们分享(例如,进行状态恢复,自己呼叫NSKeyedArchiver,或许意外地将Items引用到故事板中的某些内容中)。但是,无论你在做什么,它都试图拨打init(coder aDecoder: NSCoder)(又名initWithCoder)。

所以,你有两个选择:

  • 您应该确定什么触发initWithCoder被称为这个Items对象。从那里,你可以决定你是否真的需要经历这个努力。

  • 如果你得出的结论是,你需要initWithCoder(也可能是encodeWithCoder,也因了什么叫这个)​​,你可以随身携带上使这个类NSCoding兼容通过实施

    init(coder decoder: NSCoder) { ... } 
    func encodeWithCoder(_ encoder: NSCoder) { ... } 
    

    看到的Encoding and Decoding Objects档案和序列化编程指南。这是承认为Objective-C编写的,但这个想法在Swift中是一样的。顺便说一句,如果你得出结论认为你确实需要制作Items兼容NSCoding,那么很可能你也必须为Entry做到这一点。

但我只经​​历符合以NSCoding一旦我确定什么需要这个的这一努力,并确认这是真正需要我的应用程序。很坦率地说,除非你从事档案或恢复状态,否则如果你需要走这条路,我会感到很惊讶。你所遵循的教程没有涉及到,我在这里看不到任何东西,这表明它在这里是必要的。

如果您无法找到触发此initWithCoder的意外引用Items,我可能会建议从头开始项目并查看是否可以重现该问题。如果您能够在空白项目中重现问题,请与我们分享您为解决此问题而采取的确切步骤,因为我无法重现您描述的问题。我们需要一个MCVE,我无法重现您用迄今为止提供的代码描述的问题。

+0

我重新创建了应用程序,按照教程一步一步,并得到完全相同的错误。我删除了Xcode,然后重新安装它以查看错误是否是某种错误。 – 2015-02-05 22:50:08

+0

随意压缩项目文件夹并将其上传到某处(例如,保管箱或任何你想要的地方),我也可以看一看。我敢打赌,这将会是一件简单的事情,现在正在逃避我们。但是,我试图通过各种技术来重现您的错误,但无法完成。不过,我敢打赌,如果我们看看我们会发现它的项目。 – Rob 2015-02-05 22:53:25

+0

当我从视图控制器的IB中删除自定义类名称时,应用程序启动,但表格视图为空,并且在Interface Builder文件中收到未知类SelfieTableView的错误 – 2015-02-05 23:25:40

相关问题