-2

アプリを iOS 10 / swift 3 にアップグレードしています

NSManagedObjectしたがって、この方法で辞書(リモートデータベースから受信した値)を使用して構築します...

    let writerDictionary = [
        ...: writer.id,
        ...: writer.name,
        ...: writer.picture,
        ...: writer.publicationID,
        ...: writer.language,
        ...: writer.country
    ]

    let newWriter = Writer(dictionary: writerDictionary, context: SHARED_CONTEXT)

isFavoriteコンテキストを保存する前にオブジェクトを構築した直後にNSManaged手動で設定したプロパティです-truenewWriter.isFavorite = truenewWriter

この行は、iOS 10 で Uncaught Exception でクラッシュします - 以前は iOS 9 でまったく問題はありませんでした

私も試しnewWriter.setValue(true, forKey: "isFavorite")ました-アプリをクラッシュさせませんが、ブール値isFavoritefalse変更されません。

何か案は?これは NSManagedObject の Writer サブクラスです

import UIKit
import CoreData

@objc(Writer)

class Writer: NSManagedObject {

    // Attributes also in the database
    @NSManaged var id: NSNumber
    @NSManaged var name: String
    @NSManaged var picture: String?
    @NSManaged var publicationID: NSNumber
    @NSManaged var language: String
    @NSManaged var country: String
    @NSManaged var lastArticle: Date

    // Attributes only in the iOS app
    @NSManaged var isFavorite: Bool           // Initial value is false
    @NSManaged var hasNewArticles: Bool

    // Relationship objects
    @NSManaged var publication: Publication
    @NSManaged var articles: [Article]

    var writerImage: UIImage? {
        get {
            return ImageCache.sharedCache.imageWithIdentifier("writers-" + String(id))
        }
        set {
            ImageCache.sharedCache.storeImage(newValue, withIdentifier: "writers-" + String(id))
        }
    }

    override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?) {
        super.init(entity: entity, insertInto: context)
    }

    init(dictionary: [String : AnyObject], context: NSManagedObjectContext) {
        let entity = NSEntityDescription.entity(forEntityName: "Writer", in: context)!
        super.init(entity: entity, insertInto: context)

        id = ...  
        name = ...  
        picture = ...  
        publicationID = ...  
        language = ...  
        country = ...  
        lastArticle = ...  
    }

    override func prepareForDeletion() {
        if let _ = writerImage {
            writerImage = nil
        }
    }
}
4

2 に答える 2

2

解決

Swift 3 ベータ版の現在のバージョンには、"is" で始まるプロパティの処理に関していくつかの欠陥があるようです。

このようにプロパティの名前を調整すると、解決しました...

 @NSManaged @objc(isFavorite) var isFavorite: Bool
于 2016-07-05T17:20:11.503 に答える