检查核心数据以查找现有数据。致命错误:无法索引空缓冲区

时间:2015-03-10 12:46:46

标签: ios swift core-data

我想在Core Data中存储用户名。 这意味着我需要在保存用户名之前检查核心数据中是否存在用户名。 我收到一个错误,似乎无法找到一种可行的方法来进行此项检查。错误消息是:"无法索引空缓冲区并发生

@objc func getCoreData()
{
    let fetchRequest = NSFetchRequest(entityName: "LoginDetails")
    var error: NSError? = nil
    if let fetchResults = managedObjectContext!.executeFetchRequest(fetchRequest, error: &error) as? [LoginDetails]
    {
        if (error != nil)
        {
            println("Error")
        }
        if true
        {
            setLoginDetails(fetchResults[0])
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您的提取代码错误。以下是executeFetchRequest方法的原则:

  • 如果出现错误,则返回nil
  • 如果没有返回nil则没有错误
  • 没有匹配对象的提取会返回一个空数组。空提取不是错误。

你应该使用这样的东西:

if let fetchResults = managedObjectContext!.executeFetchRequest(fetchRequest, error: &error) as? [LoginDetails]
{
    if countElements(fetchResults) > 0 {
        // at least 1 matching object found
        setLoginDetails(fetchResults[0])
    }
    else {
        // empty fetch. No matching objects found
    }
}
else {
    fatalError("Can't fetch \(error)")
}