【问题标题】:How to Fetch Coredata?如何获取核心数据?
【发布时间】:2018-07-27 13:26:24
【问题描述】:

我正在尝试使用属性 token 获取 Coredata User 但是我无法让它工作,因为我收到一条错误消息 Value of type '[User]' has no member 'token'。我在堆栈上尝试了几个修复,但似乎不起作用。

这是我的代码:

let managedContext = coreDataStack.managedContext
let request = NSFetchRequest<User>(entityName: "User")
do {
    let users = try managedContext.fetch(request)
    print(users)
    print(users.token)

} catch {
    print(error.localizedDescription)
}

【问题讨论】:

  • users 是 User 类的对象数组。所以该数组没有token。你可能想做print("users tokens: \(users.map{$0.token})")?
  • @Larme 谢谢你的工作

标签: ios swift core-data swift4


【解决方案1】:

您非常接近,users 的类型是 [User],因此是 User 对象的数组,因此您可以通过以下方式获取每个 User 的令牌:

let managedContext = coreDataStack.managedContext
let request = NSFetchRequest<User>(entityName: "User")
do {
    let users = try managedContext.fetch(request)
    for user in users {
        print(user.token)
    }
} catch {
   print(error.localizedDescription)
}

或者,如果您想获得最后一个 (.last) 或第一个 (.first) User,您可以这样做:

do {
    let users = try managedContext.fetch(request)
    if let user = users.first {
        print(user.token)
    }
} catch {
   print(error.localizedDescription)
}

【讨论】:

    【解决方案2】:

    如果您尝试访问特定用户的令牌,则应在唯一属性上设置谓词。例如。如果唯一属性是(例如)uniqueId:

    let managedContext = coreDataStack.managedContext 
    let request =    NSFetchRequest<User>(entityName: "User") 
    request.predicate =    NSPredicate(format: "uniqueId == %@", uniqueId)  
    do {  
    let users =    try managedContext.fetch(request)  
      if let user = users.last {   
      print(user.token)  
      }  
    } catch { 
     print(error.localizedDescription)  
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多