我使用Swift获得了一些错误,当我尝试了其他Stack Overflow帖子中列出的解决方案时,我会收到其他错误。我得到的第一个错误是 NSForwarding:警告:类'h2.Items'的对象0x7dc4ca30没有实现methodSignatureForSelector: - 提前出现问题 无法识别的选择器 - [h2.Items initWithCoder:]
然后我更新了我的代码以添加“NSObject”,当我这样做时,我收到以下错误:
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [h2.Items initWithCoder:]:无法识别的选择器发送到实例0x79069250'
我不知道从哪里开始。我一直在关注http://shrikar.com/blog/2015/01/17/uitableview-and-uitableviewcell-customization-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 :(得分: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
的努力,并确认这是我的应用程序真正需要的。
坦率地说,除非你参与档案或国家修复,否则如果你需要沿着那条路走下去,我会感到非常惊讶。你所关注的教程没有参与其中,我在这里看不到任何暗示这是必要的。
如果您无法找到触发此Items
的{{1}}的非预期引用,我可能会建议您从头开始项目,看看是否可以重现该问题。如果您能够在空白项目中重现问题,请与我们分享您为解决此问题而采取的准确步骤,因为我无法重现您描述的问题。我们需要MCVE并且我无法使用到目前为止提供的代码重现您描述的问题。