【问题标题】:Coredata: Not casting Coredata Fetch Results to ObjectsCoredata:不将 Coredata 获取结果转换为对象
【发布时间】:2015-09-04 08:34:19
【问题描述】:

我正在开发一个地图应用程序,但遇到了一个问题。

我似乎无法让 Coredata 将结果转换为相关的 Pin 数据。

这是我用来从 CD 下载 Pin 图的方法

    func fetchAllPins() -> [Pin] {
    let error: NSErrorPointer = nil

    // Create the Fetch Request
    let fetchRequest = NSFetchRequest(entityName: "Pin")
    fetchRequest.returnsObjectsAsFaults = false

    // Execute the Fetch Request
    let results = sharedContext.executeFetchRequest(fetchRequest, error: error)

    // Check for Errors
    if error != nil {
        println("Error in fetchAllEvents(): \(error)")
    }
    println("RESULTS ARE")
    println(results) // Gives results ( see console below)

    return results as! [Pin] // Returns Blank no idea why

}

这是控制台的输出,显示正在返回的数据。

   Optional([<Pin: 0x7fb9144dcf60> (entity: Pin; id: 0xd000000000040000 <x-coredata://5E886C33-FB0F-4035-9362-489A0BBFB0D9/Pin/p1> ; data: {
    lat = "54.98870385960889";
    long = "-2.732679843506143";
    reference = 1;
}), <Pin: 0x7fb911697ee0> (entity: Pin; id: 0xd000000000080000 <x-coredata://5E886C33-FB0F-4035-9362-489A0BBFB0D9/Pin/p2> ; data: {
    lat = "54.58505971892202";
    long = "-1.719484882196165";
    reference = 1;
})])

这是我正在使用的 Pin 对象:

    import Foundation
import MapKit
import CoreData

@objc(Pin)

class Pin : NSManagedObject {
    struct Keys {
        static let lat = "lat"
        static let long = "long"
    }
    @NSManaged var lat:Double
    @NSManaged var long: Double
    @NSManaged var reference: NSNumber




 override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) {
        super.init(entity: entity, insertIntoManagedObjectContext: context)
        println("-----")

        println(entity)
    }

init(llat: CLLocationDegrees, llong: CLLocationDegrees, llinksToImages: [String]?, context: NSManagedObjectContext) {

    let entity =  NSEntityDescription.entityForName("Pin", inManagedObjectContext: context)!
    super.init(entity: entity,insertIntoManagedObjectContext: context)
    lat = llat as Double
    long = llong as Double
    reference = 1

}

非常欢迎任何建议

【问题讨论】:

    标签: ios swift core-data


    【解决方案1】:

    我设法破解它.. 很高兴理解为什么我的解决方案在那里不起作用但万一有人需要它:

    如果你替换:

    return results as! [Pin]
    

    而是将它推入一个自己的解压结果数组中,它看起来很不错。 例如:

    var myAwesomeResults = [Pin]()
    for pinItem in results{
    myAwesomeResults.append(pinItem)
    }
    return myAwesomeResults // returns data correctly!
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      相关资源
      最近更新 更多