为什么当我在第一个位置打印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实例之前查看其中的内容。