Swift:将CoreData作为数组获取

Tdo*_*leG 17 sqlite core-data ios swift

我想获取sqlite表中的所有已保存数据.

我现在正在这样做:

 func GetAllData() -> NSArray
{
    var error : NSError? = nil;
    var request : NSFetchRequest = NSFetchRequest(entityName: "Locations");
    let result : [AnyObject] = managedObjectContext!.executeFetchRequest(request, error:&error)!;
      var elements : NSMutableArray = NSMutableArray();
    for fetchedObject in result
    {
        elements.addObject(fetchedObject[0]);
    }
    print(elements);
    return elements;
}
Run Code Online (Sandbox Code Playgroud)

我在Objective-C中获取数据没有问题,但是我很快就得到它!

保存数据工作正常.我有两行"名称"和"类别".如何显示所有已保存的数据?

der*_*ida 33

您应该将CoreData中的所有对象加载到NSManaged Objects的Array/Dict中.

例如:

var locations  = [Locations]() // Where Locations = your NSManaged Class

var fetchRequest = NSFetchRequest(entityName: "Locations")
locations = context.executeFetchRequest(fetchRequest, error: nil) as [Locations]

// Then you can use your properties.

for location in locations {

  print(location.name)   

}
Run Code Online (Sandbox Code Playgroud)

  • 如果获取请求失败,`executeFetchRequest()`返回一个*optional*,它是`nil`.如果强行转换为"[Locations]",则该应用程序将崩溃.(比较http://stackoverflow.com/a/26459060/1187415.) (7认同)

Abd*_*rim 8

斯威夫特3

func fetchData(){

    onlyDateArr.removeAll()
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "PhotoData")

    do {
        let results = try context.fetch(fetchRequest)
        let  dateCreated = results as! [PhotoData]

        for _datecreated in dateCreated {
            print(_datecreated.dateCreation!)
            onlyDateArr.append(_datecreated)
        }
    }catch let err as NSError {
        print(err.debugDescription)
    }


}
Run Code Online (Sandbox Code Playgroud)


Vik*_*wal 7

试试这个:

let fetchRequest = NSFetchRequest(entityName: "Locations")

 do {
     let results = try managedObjectContext.executeFetchRequest(fetchRequest)
     let  Locations = results as! [Locations]

     for location in Locations {
        println(location)   
     }
    } catch let error as NSError {
       print("Could not fetch \(error)”)
 }
Run Code Online (Sandbox Code Playgroud)


Fat*_*tie 6

2020 语法

复制和粘贴

func grabAllPersons() {
    var pp: [CD_Person] = []
    do {
        let r = NSFetchRequest<NSFetchRequestResult>(entityName: "CD_Person")
        let f = try core.container.viewContext.fetch(r)
        pp = f as! [CD_Person]
    } catch let error as NSError {
        print("woe grabAllPersons \(error)")
    }
    
    for p: CD_Person in pp {
        print(" >> \(p.firstName)")
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,这core.container.viewContext是“您的”上下文,通常(但不总是)由core.container.viewContext. (示例

关键提示...

在某些情况下:

它是ABSOLUTELY重要的是你不小心使用了“错误”的情境。

例如,您正在做一个小的附带问题,例如计数或只是抓取所有项目。

这个问题在大标题下解释在这里“行使极度谨慎......”