2017-04-24 69 views
0

hI:我一直在使用EVReflection使我們的網絡層完全恢復,我必須說:真棒工作!感謝此庫的@evermeer。你可以在這裏:現在https://github.com/evermeer/EVReflectionEV反射與NSManagedObject崩潰/不工作

,到發佈:

下一步是讓這些對象直入核心數據。這是有問題的類別之一

//這裏是對象和EVReflectable擴展的文件聲明:

import Foundation 
import CoreData 
import EVReflection 

public class NGTripSummary: NSManagedObject { } 

extension NGTripSummary: EVReflectable { } 

//這裏有對象屬性:

// NGTripSummary + CoreDataProperties.swift

import Foundation 
import CoreData 

extension NGTripSummary { 

    @nonobjc public class func fetchRequest() -> NSFetchRequest<NGTripSummary> { 
     return NSFetchRequest<NGTripSummary>(entityName: "NGTripSummary") 
    } 

    @NSManaged public var carId: Int64 
    @NSManaged public var citiesVisited: NSObject? 
    @NSManaged public var cost: Double 
    @NSManaged public var distance: Double 
    @NSManaged public var globalStartDate: NSDate? 
    @NSManaged public var globalEndDate: NSDate? 
    @NSManaged public var kpl: Double 
    @NSManaged public var litres: Double 
    @NSManaged public var routeLocations: NSObject? 
    @NSManaged public var sessionId: Int64 
    @NSManaged public var localStartDate: NSDate? 
    @NSManaged public var localEndDate: NSDate? 
    @NSManaged public var duration: Int64 
    @NSManaged public var speed: Double 
    @NSManaged public var _id: Int64 
    @NSManaged public var sessionUuid: String? 
    @NSManaged public var tripUuid: String? 

} 

//。這裏是JSON字符串,它表示一個演示對象:

let tripData = "{\"id\":26105240,\"userId\":25796277,\"carId\":25817551,\"vehicleId\":57812351,\"sessionUuid\":\"53324259-aa69-41c8-8f9e-c62bdb70f165\",\"tripUuid\":\"afdd8f55-6d14-4cf9-bd9f-5b6da47aaf93\",\"localStartDate\":1487170622490,\"localEndDate\":1487178323654,\"globalStartDate\":1487163422490,\"globalEndDate\":1487171123654,\"routeLocations\":null,\"litres\":24.7699,\"kpl\":0.0772,\"cost\":153.3258,\"distance\":1.9132,\"duration\":491.958,\"speed\":14.0}" 

//這裏就是我想用它來創建這個Mock對象的方法:

func makeMockData() { 
    let singleTrip = NGTripSummary(json: tripData) 
    print("Single Trip: \(singleTrip)") 
} 

//現在:創建時對象,碰撞發生在這裏@類EVReflection:

 // Call your own object validators that comply to the format: validate<Key>:Error: 
      do { 
       var setValue: AnyObject? = value as AnyObject? 
/* LINE 923: CRASH HAPPENS HERE -> */ try anyObject.validateValue(&setValue, forKey: key) 
       anyObject.setValue(setValue, forKey: key) 
      } catch _ { 
       (anyObject as? EVReflectable)?.addStatusMessage(.InvalidValue, message: "Not a valid value for object `\(NSStringFromClass(type(of: (anyObject as AnyObject))))`, type `\(type)`, key `\(key)`, value `\(value)`") 
       print("INFO: Not a valid value for object `\(NSStringFromClass(type(of: (anyObject as AnyObject))))`, type `\(type)`, key `\(key)`, value `\(value)`") 
      } 

//////////////////原因進行崩潰/////////// /////////

[錯誤]錯誤:CoreData:錯誤:無法請NSManagedObject類 'NGTripSummary' CoreData指定初始化:錯誤:CoreData:錯誤:無法請NSManagedObject類指定初始化 'NGTripSummary'

//// //////////////////////////////////////////////

- >任何人,請幫助:-0

回答

1

EVReflection現在有一個CoreData的Cocoapods子規格。欲瞭解更多信息,請參閱https://github.com/evermeer/EVReflection/tree/master/Source/CoreData

它可以讓你寫這樣的代碼:\

let moc: NSManagedObjectContext = EVReflectionTestsData().moc // Your code for getting the NSManagedObjectContext. 

let obj = CoreDataPerson(context: moc, json: "{\"firstName\" : \"Edwin\", \"lastName\" : \"Vermeer\"}") 

try! moc.save() //TODO: implement error handling 
2

錯誤消息描述確切的問題。你似乎與這行代碼創建的NGTripSummary實例:

let singleTrip = NGTripSummary(json: tripData) 

NGTripSummaryNSManagedObject一個子類,而你根本沒有撥打指定初始化爲NSManagedObject。這是必需的。您必須致電init(entity:insertInto:)NSManagedObject,或使用NSEntityDescription上的工廠方法insertNewObject(forEntityName:into:)獲取有效的管理對象。如果你沒有,你會得到這個特定的錯誤,你的應用程序崩潰。

如果您需要使用tripData創建實例,則可以這樣做,但還需要提供託管對象上下文和實體描述。你可以在你的類上使用一個便利的初始化器來完成這個任務,這會在初始化過程中調用指定的初始化器。

+0

嗨@湯姆哈靈頓,請你提供指定初始化的典範./感謝 –

+0

@HernanArber每個類都有?一個指定的初始化程序,對於'NSManagedObject',這是我在我的答案中提到的那個。如果您不確定指定的初始化程序是什麼,請查看Apple的[有關Swift中的類初始化的文檔](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization。 HTML#// apple_ref/DOC/UID/TP40014097-CH18-ID203)。 –