0

アプリケーションで CoreData を使用しています。2 つの属性を持つエンティティを作成しました。1 つは Int 型、もう 1 つは Transformable 型です。記録を正常に保存できました。しかし、フェッチしようとすると、クラッシュします。もう 1 つ、Transformable 型を使用しなくてもすべて正常に動作しています。その理由は何ですか?変形タイプですか?はいの場合、解決策は何ですか?

func saveUserInfoInDatabase(userDetails: FleetInfoDetails) {
    self.deleteUserInfoFromDatabase()
    let entityDescription = NSEntityDescription.entityForName("UserInfo", inManagedObjectContext: self.userInfoObjectContext)
    let data = UserInfo(entity: entityDescription!, insertIntoManagedObjectContext: self.userInfoObjectContext)
    print(userDetails)
    data.info = userDetails
    data.sync = 1
    do {
        try self.userInfoObjectContext.save()
    } catch {
        fatalError("Failure to save context: \(error)")
    }
}

func deleteUserInfoFromDatabase() {
    let fetchRequest = NSFetchRequest(entityName: "UserInfo")
    if #available(iOS 9.0, *) {
        let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)
        do {
            try DatabaseManager.sharedInstance.persistentStoreCoordinator.executeRequest(deleteRequest, withContext: self.userInfoObjectContext)
            do {
                try self.userInfoObjectContext.save()
            } catch {
                let saveError = error as NSError
                print(saveError)
            }
        } catch let error as NSError {
            let saveError = error as NSError
            print(saveError)
        }
    } else {
        // Fallback on earlier versions
    }
}

func fetchUserInfoFromDatabase(){
    let request = NSFetchRequest(entityName: "UserInfo")
    do {
        let results = try self.userInfoObjectContext.executeFetchRequest(request) as? [UserInfo] //Getting crash here
        if results!.count > 0 {

        }else{
            print("0 results or potential error")
        }
    } catch {
        let saveError = error as NSError
        print(saveError)
    }
}

次のオブジェクト クラスを Transformable 属性に割り当てています。

class FleetInfoDetails: NSObject {

var fleetId: Int!
var fleetImage: String!
var accessToken: String!
var email: String!
var phone: String!
var password: String!
var name: String!
var teams: Array<AssignedTeamDetails>?

func encodeWithCoder(_aCoder: NSCoder) {   }
func initWithCoder(aCode:NSCoder) {

}

init(json: NSDictionary) {

    if let fleetId = json["fleet_id"] as? Int {
        self.fleetId = fleetId
    }
    if let fleetImage = json["fleet_image"] as? String {
        if fleetImage.isEmpty{
            self.fleetImage = nil
        }
        self.fleetImage = fleetImage
    }
    if let accessToken = json["access_token"] as? String {
        if accessToken.isEmpty{
            self.accessToken = nil
        }
        self.accessToken = accessToken
    }
    if let email = json["email"] as? String {
        if email.isEmpty{
            self.email = nil
        }
        self.email = email
    }

    if let phone = json["phone"] as? String {
        if phone.isEmpty{
            self.phone = nil
        }
        self.phone = phone
    }
    if let password = json["password"] as? String {
        if password.isEmpty{
            self.password = nil
        }
        self.password = password
    }

    if let name = json["name"] as? String {
        if name.isEmpty{
            self.name = nil
        }
        self.name = name
    }

    if let items = json["teams"] as? NSArray{
        if items.count == 0{
            teams = [AssignedTeamDetails]()
        } else {
            teams = [AssignedTeamDetails]()
        }
        for item in items{
            if let team = AssignedTeamDetails(json: item as! NSDictionary) as AssignedTeamDetails! {
                teams?.append(team)
            }
        }
    }
 }
4

1 に答える 1