为什么当我在第一个位置打印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";

那是我不明白的,第一个值都是nil,我的sqlite中只有一行数据,而不是两行

这是您将其保存到收藏夹实体的方式
    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)")
    }
}

最佳答案

写入您的提取请求以返回实体名称为“Favoritos”的所有实例。该搜索结果表明您已经创建了两个。

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

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

09-08 01:49