CoreData fetch返回nil

时间:2016-02-18 20:02:13

标签: ios swift core-data

为什么当我在第一个位置打印myData数组时,我的所有valueForKey都是nil,就像这样

  func fetchFavorites(){

    let fetchRequest = NSFetchRequest(entityName: "Favoritos")

    do {
        let result = try moc.executeFetchRequest(fetchRequest)
        for managedObject in result {

            if let Fid = managedObject.valueForKey("place_favorite_id"), 
            desc_place = managedObject.valueForKey("desc_place"), 
            place_name = managedObject.valueForKey("place_name"),
            lat = managedObject.valueForKey("latitude"),
            lon = managedObject.valueForKey("longitude") {

                print("\(Fid) \(desc_place) \(place_name) \(lat) \(lon)")
                Place_Id.append(Fid as! String)

            }

        }
        myData = result

    } catch {
        let fetchError = error as NSError
        print(fetchError)
    }
}

打印的myData数组

    Array[<RivosTaxi.Favoritos: 0x7fb46ff5ac80> (entity: Favoritos; id: 0xd00000000024000e <x-coredata://82CCF746-275D-4FC6-9C5C-EFD1EDED2F21/Favoritos/p9> ; data: {
"desc_place" = nil;
latitude = nil;
longitude = nil;
"place_favorite_id" = nil;
"place_name" = nil;

    }), <RivosTaxi.Favoritos: 0x7fb46ff5af80> (entity: Favoritos; id: 0xd00000000028000e <x-coredata://82CCF746-275D-4FC6-9C5C-EFD1EDED2F21/Favoritos/p10> ; data: {
"desc_place" = "";
latitude = "24.822311";
longitude = "-107.4240634";
"place_favorite_id" = 94;
"place_name" = "Otro mad";

这是我不明白的,第一个值都是零,我的sqlite只有1行数据,而不是两行

这就是y将它保存到Favoritos Entity

的方式
    func FavoritosSave(){

    let entity = NSEntityDescription.insertNewObjectForEntityForName("Favoritos", inManagedObjectContext: moc)



    entity.setValue(place_name, forKey: "place_name")
    entity.setValue(place_favorite, forKey: "place_favorite_id")
    entity.setValue(desc_place, forKey: "desc_place")
    entity.setValue(latitude, forKey: "latitude")
    entity.setValue(longitude, forKey: "longitude")

    // we save our entity
    do {
        try moc.save()


    } catch {
        fatalError("Failure to save context: \(error)")
    }
}

1 个答案:

答案 0 :(得分:2)

您的获取请求将被写入以返回实体名称为&#34; Favoritos&#34;的所有实例。该搜索结果显示您已创建了两个。

只能看到一行的解释可能是您的MOC尚未保存。但是,在Core Data的SQLite文件中进行垃圾箱潜水是令人沮丧的一个因素。使用记录的API。

您应该添加对fetchFavoritos()的调用作为save()函数的第一行,以便在创建Favoritos实例之前查看其中的内容。