アプリを 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
手動で設定したプロパティです-true
newWriter.isFavorite = true
newWriter
この行は、iOS 10 で Uncaught Exception でクラッシュします - 以前は iOS 9 でまったく問題はありませんでした
私も試しnewWriter.setValue(true, forKey: "isFavorite")
ました-アプリをクラッシュさせませんが、ブール値isFavorite
はfalse
変更されません。
何か案は?これは 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
}
}
}