Ios 尝试向核心数据添加新记录时出错
我想将数据保存到CoreData,但出现下一个错误:Ios 尝试向核心数据添加新记录时出错,ios,iphone,swift,core-data,Ios,Iphone,Swift,Core Data,我想将数据保存到CoreData,但出现下一个错误: Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSEntityDescription 0x7fc428f75940> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key username.' 直至: p
Terminating app due to uncaught exception 'NSUnknownKeyException',
reason: '[<NSEntityDescription 0x7fc428f75940> setValue:forUndefinedKey:]:
this class is not key value coding-compliant for the key username.'
直至:
print("it's a new record")
newRecord.setValue(user.jidStr, forKey: "username")
打印这是一条新记录
并崩溃!我的代码有什么问题
这是我的CoreData屏幕截图:
我认为,如果找不到匹配的记录,则需要首先将类似以下内容插入到托管对象上下文中
do {
let result: NSArray = try context.executeFetchRequest(request)
if result.count > 0 {
// NEW CODE: Print the username if found in result[0]
let userFound = result[0]
let usernamefound = String(userFound.valueForKey("username")!)
print("It exists \(usernameFound)")
print(context)
} else {
print("it's a new record")
let newRecordEntity: NSEntityDescription = NSEntityDescription.entityForName("UnreadMessages", inManagedObjectContext: context)!
let newRecord = UnreadMessages(entity: newRecordEntity!, insertIntoManagedObjectContext: context)
newRecord.setValue(user.jidStr, forKey: "username")
newRecord.setValue("1", forKey: "count")
do {
try context.save()
} catch let error {
print(error)
}
我认为如果您没有找到匹配的记录,您需要首先将类似这样的内容插入到托管对象上下文中
do {
let result: NSArray = try context.executeFetchRequest(request)
if result.count > 0 {
// NEW CODE: Print the username if found in result[0]
let userFound = result[0]
let usernamefound = String(userFound.valueForKey("username")!)
print("It exists \(usernameFound)")
print(context)
} else {
print("it's a new record")
let newRecordEntity: NSEntityDescription = NSEntityDescription.entityForName("UnreadMessages", inManagedObjectContext: context)!
let newRecord = UnreadMessages(entity: newRecordEntity!, insertIntoManagedObjectContext: context)
newRecord.setValue(user.jidStr, forKey: "username")
newRecord.setValue("1", forKey: "count")
do {
try context.save()
} catch let error {
print(error)
}
由于未捕获异常“NSUnknownKeyException”而终止应用程序,
理由:'[
setValue:forUndefinedKey::此类不是键值
符合密钥用户名的编码要求。'
这是你的大线索。这意味着您要求NSEntityDescription
的实例使用KVC设置名为“username”的属性,但该类不支持该键
打印这是一张新唱片,然后崩溃了!我的代码有什么问题
您的代码不会创建新的“记录”。此代码
let newRecord: NSEntityDescription = NSEntityDescription.entityForName("UnreadMessages", inManagedObjectContext: context)!
创建NSEntityDescription
,可用于创建NSManagedObject
创建要调用的新“记录”
let newRecord = NSEntityDescription.insertNewObjectForEntityForName(
"UnreadMessages",
inManagedObjectContext:context)
因此,您现在可以看到您正试图在实体描述上设置“username”,而不是在托管对象上设置“username”
由于未捕获异常“NSUnknownKeyException”而终止应用程序,
理由:'[
setValue:forUndefinedKey::此类不是键值
符合密钥用户名的编码要求。'
这是你的大线索。这意味着您要求NSEntityDescription
的实例使用KVC设置名为“username”的属性,但该类不支持该键
打印这是一张新唱片,然后崩溃了!我的代码有什么问题
您的代码不会创建新的“记录”。此代码
let newRecord: NSEntityDescription = NSEntityDescription.entityForName("UnreadMessages", inManagedObjectContext: context)!
创建NSEntityDescription
,可用于创建NSManagedObject
创建要调用的新“记录”
let newRecord = NSEntityDescription.insertNewObjectForEntityForName(
"UnreadMessages",
inManagedObjectContext:context)
因此,您现在可以看到您正试图在实体描述上设置“username”,而不是在托管对象上设置“username”。这似乎可行,但如果它存在呢?我可以在这里搜索吗,比如
select count where username=some\u name\u here
?@OrkhanAlizade-虽然下面可能有一个SQL数据库,但核心数据不是数据库,所以您不需要发出SQL语句。您只需询问持久存储是否有对象的实例。在核心数据中,这称为获取,您可以通过阅读NSFetchRequest
上的文档来了解它的全部内容。基本上,你通过某个键来获取,如果对象在那里,你就更新它,如果没有,你就创建一个新的。这似乎是可行的,但是如果它在那里呢?我可以在这里搜索吗,比如select count where username=some\u name\u here
?@OrkhanAlizade-虽然下面可能有一个SQL数据库,但核心数据不是数据库,所以您不需要发出SQL语句。您只需询问持久存储是否有对象的实例。在核心数据中,这称为获取,您可以通过阅读NSFetchRequest
上的文档来了解它的全部内容。基本上,您可以通过某个键获取,如果对象在那里,您可以更新它,如果没有,您可以创建一个新的。我可以在这里像select count where username=some\u name\u here
?您好,如果您只想获取给定用户名的记录,您需要使用NSPREDICATE。如果有多个条件,则需要一个复合谓词。我用一个例子更新了上面的答案,其中使用了username=some\u username的谓词谢谢!但它返回我使用未解析标识符“UnreadMessages”的此错误它在哪一行崩溃?今天我面前没有mac电脑,所以我无法调试它。如果是“let newRecord=UnreadMessages…”行,请尝试上面Jody答案中的示例。是的,我已经做过了。最后一个问题,我获取了请求并获取了(实体:UnreadMessages;id:0xd00000000040014;数据:{count=1;username=“Bob”})
。如何从此处仅打印用户名?我是否可以在此处搜索,如选择count where username=some\u name\u here
?您好,如果您只想获取给定用户名的记录,则需要使用NSPREDICATE。如果有多个条件,则需要一个复合谓词。我用一个例子更新了上面的答案,其中使用了username=some\u username的谓词谢谢!但它返回我使用未解析标识符“UnreadMessages”的此错误它在哪一行崩溃?今天我面前没有mac电脑,所以我无法调试它。如果是“let newRecord=UnreadMessages…”行,请尝试上面Jody答案中的示例。是的,我已经做过了。最后一个问题,我获取了请求并获取了(实体:UnreadMessages;id:0xd00000000040014;数据:{count=1;username=“Bob”})
。如何从这里打印用户名?