我正在使用 Swift 2.0 Xcode 7.0 并在我的应用程序中使用 Core Data。 我在从 coredata 取回结果时遇到了麻烦。 我的实体名称是 User,它是 NSManagedObject 的子类。当我从编辑器创建 NSManagedObject 子类时,XCode 7 为我创建了两个类
- User.swift
- 扩展类User+CoreDataProperties.swift
我的User.swift类
import Foundation
import CoreData
class User: NSManagedObject {
// Insert code here to add functionality to your managed object subclass
}
User+CoreDataProperties.swift 类 导入基金会 导入核心数据
extension User {
@NSManaged var facebookId: String?
@NSManaged var googleId: String?
@NSManaged var userAge: NSNumber?
@NSManaged var userEmail: String?
@NSManaged var userId: NSNumber?
}
现在我成功保存了一条记录。现在,当我取回它时,我正在使用以下代码。我正在根据 UserID 获取单个记录
let fetchRequest = NSFetchRequest(entityName: "User")
fetchRequest.predicate = NSPredicate(format: "userId == %d",userId )
do {
let fetchResults = try
self.managedObjectContext.executeFetchRequest(fetchRequest) as? [User]
// At this line I am getting warning
// Cast from [User] to unrelated type User always fails
var userObj = fetchResults as! User
//How to get rid of the warning
//So how to fetch back and make changes in the object. I want to updates the change. For ex I want to do something like
userObj.userAge = 30 //and then update this and save the context
}
catch let fetchError as NSError {
print("error: \(fetchError.localizedDescription)")
}
// if I use this line
let user = fetchResults as [User]?
// It does cast but then I am unable to find any of the members like userId, userAge in it. It says value of type [User]? has no member userAge
我看到了这个链接并关注了。但是这里没有更新
http://www.sthoughts.com/2015/06/09/swift-2-0-snippet-coredata-fetching-with-error-handling/
请帮我解决这个问题。任何帮助将不胜感激。
最佳答案
获取请求返回对象的数组(可以有 零个、一个或多个元素),即使您只期望一个 结果。在您的情况下,您只需访问第一个元素 结果数组的:
let fetchResults = try
self.managedObjectContext.executeFetchRequest(fetchRequest) as! [User]
if fetchResults.count > 0 {
let user = fetchResults[0] // `User`
user.age = 24
// ...
} else {
// no matching user found ...
}
或者:
if let user = fetchResults.first {
user.age = 24
// ...
} else {
// no matching user found ...
}
另请注意,您知道获取的对象具有User
类型
(因为您在 Core Data 模型中配置了实体类
检查员),因此强制转换 as! [User]
在这里是合适的。
关于ios - 从 [Entity] 转换为无关类型的 Entity 在 CoreData 中总是失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32921299/