【发布时间】:2016-06-24 21:32:35
【问题描述】:
我正在将我的应用升级到 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 属性,我在构造 newWriter 对象之后,在保存上下文之前手动将其设置为 true 和 newWriter.isFavorite = true -
此行在 iOS 10 中因未捕获异常而崩溃 - 以前 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
}
}
}
【问题讨论】:
-
“未捕获的异常”不是崩溃原因。异常详情是什么?
-
没什么!这就是我在控制台中得到的全部内容。 “libc++abi.dylib:以 NSException 类型的未捕获异常终止”
-
在异常上设置断点,看看它在哪里崩溃。
-
当我尝试在
newWriter.isFavorite = true中将isFavorite属性设置为true并且控制台除了上面的双引号之间的行之外没有给出任何内容时,它会崩溃。 -
转到堆栈跟踪中的最后一行(在左侧),并在调试器中键入“po $arg1”
标签: core-data swift3 xcode8 ios10