gpt4 book ai didi

ios - 为什么在设置 NSManagedObject 的属性时抛出异常?

转载 作者:搜寻专家 更新时间:2023-11-01 06:41:06 26 4
gpt4 key购买 nike

我正在制作一个应用程序,允许用户创建播放列表并将字符串放入其中。我正在使用核心数据执行此操作。这是数据模型:

enter image description here

非常不言自明。然后我生成两个实体的托管对象子类:

extension Playlists {

@NSManaged var name: String?
@NSManaged var utterrances: NSOrderedSet?

}

class Playlists: NSManagedObject {
override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) {
super.init(entity: entity, insertIntoManagedObjectContext: context)
}
}

extension Utterance {

@NSManaged var string: String?
@NSManaged var playlist: Playlists?

}

class Utterance: NSManagedObject {

override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) {
super.init(entity: entity, insertIntoManagedObjectContext: context)
}
}

现在我在数据库中有空的播放列表。我正在编写代码让用户将新字符串添加到播放列表中。我通过让用户从 TableView Controller 中选择一个播放列表来做到这一点。当用户选择播放列表时,字符串(存储在 stringToAdd 中,见下文)被添加到所选播放列表。

这是 didSelectRowAtIndexPath 方法中的代码:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let playlistToAddTo = playlists[indexPath.row]
let entity = NSEntityDescription.entityForName("Playlist", inManagedObjectContext: dataContext)
let utterance = Utterance(entity: entity!, insertIntoManagedObjectContext: dataContext)
utterance.string = stringToAdd
utterance.playlist = playlistToAddTo
dataContext.saveData()
}

当我点击表格 View 单元格时,它崩溃了:

X[1541:108724] -[X.Playlists setString:]: unrecognized selector sent to instance 0x7d01ab70
2016-02-07 17:34:10.520 iEnglish[1541:108724] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[X.Playlists setString:]: unrecognized selector sent to instance 0x7d01ab70'

注意:我用 X 替换了所有出现的应用程序名称,因为我不想透露它。

显然这行代码导致了错误:

utterance.string = stringToAdd

我添加了一些打印语句来验证:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
print(stringToAdd) // #1
let playlistToAddTo = playlists[indexPath.row]
print(playlistToAddTo.name) // #2
let entity = NSEntityDescription.entityForName("Playlist", inManagedObjectContext: dataContext)
print("entity object created") // #3
let utterance = Utterance(entity: entity!, insertIntoManagedObjectContext: dataContext)
print("new utterance created") // #4
utterance.string = stringToAdd
print("string added") // #5
utterance.playlist = playlistToAddTo
print("playlist added") // #6
dataContext.saveData()
print("data saved") // #7
}

并且只打印#1 ~ #4。

为什么会这样?如何解决?

最佳答案

问题是错误的实体描述。

let entity = NSEntityDescription.entityForName("Playlist", inManagedObjectContext: dataContext)
let utterance = Utterance(entity: entity!, insertIntoManagedObjectContext: dataContext)

您正在创建一个实体描述Playlist,然后是一个对象Utterance,它与实体描述不匹配并且没有属性string

关于ios - 为什么在设置 NSManagedObject 的属性时抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35251997/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com