managedObjectContext 不能多次使用?
managedObjectContext cannot be used more than once?
我有一个应用程序使用 CoreData 来保存使用 MPMediaPicker
的不同播放列表。保存第一个后,当我尝试添加第二个时,应用程序崩溃了。下面是整个调试队列。
创建第一条记录。
musicTemp = <MPMediaItemCollection: 0x13df04440>=========>prepareForSegue
saveValues()
▿ Optional<NSManagedObjectContext>
- Some : <NSManagedObjectContext: 0x13de88a60>
musicTemp = <MPMediaItemCollection: 0x13df04440>=========>saveValues
ModelName.Rule
Optional(<NSManagedObjectContext: 0x13de88a60>)
Number of rows = 1
Number of rows = 1
musicTemp = <MPMediaItemCollection: 0x13df04440>=========>RuleViewCell
mainManagedObjectContext.save
第一个记录创建结束。开始创建第二条记录,
musicTemp = <MPMediaItemCollection: 0x13dea7620>=========>prepareForSegue
saveValues()
▿ Optional<NSManagedObjectContext>
- Some : <NSManagedObjectContext: 0x13de88a60>
musicTemp = <MPMediaItemCollection: 0x13dea7620>=========>saveValues
ModelName.Rule
Optional(<NSManagedObjectContext: 0x13de88a60>)
2016-09-10 11:39:02.469 AppName[5237:2139350] -[MPMediaItemCollection compare:]: unrecognized selector sent to instance 0x13df04440
All Exceptions
error: use of undeclared identifier 'mainManagedObjectContext'
error: 1 errors parsing expression
应用程序崩溃!!
添加记录的相关代码,
// Method to save the extracted values to CoreData Objects
private func saveValues() {
// Initialize entity description
let RuleDescription = NSEntityDescription.entityForName("Rule",inManagedObjectContext:mainManagedObjectContext!)
let rule = Rule(entity: RuleDescription!, insertIntoManagedObjectContext: mainManagedObjectContext)
// Set object values from temporary variables
rule.music = musicTemp!
print("musicTemp = \(musicTemp!.count)=========>saveValues")
// Save the object in privateManagedObjectContext
print(NSStringFromClass(rule.classForCoder))
print(mainManagedObjectContext)
if ((mainManagedObjectContext?.hasChanges) != nil) {
do {
try mainManagedObjectContext?.save()
print("mainManagedObjectContext.save")
} catch let saveError as NSError {
print("(AddRuleViewController)(mainManagedObjectContext)saveError: \(saveError), \(saveError.userInfo)")
}
}
}
mainManagedObjectContext
是使用依赖注入引用的。我无法弄清楚为什么它能够第一次保存,但不能再次保存。实际上,它抱怨 mainManagedObjectContext
.
您的 musicTemp
变量似乎有些奇怪。
你很难转换它(这通常是一种代码味道)并且错误是围绕那个变量和它真正包含的对象。
指标为:
-[MPMediaItemCollection compare:]: unrecognized selector sent to instance 0x14ef90390
Core Data 正在尝试在 MPMediaItemCollection
对象上调用 compare:
,但 0x14ef90390
不是 MPMediaItemCollection
。
开始研究该变量并确保它确实如您所想。
我有一个应用程序使用 CoreData 来保存使用 MPMediaPicker
的不同播放列表。保存第一个后,当我尝试添加第二个时,应用程序崩溃了。下面是整个调试队列。
创建第一条记录。
musicTemp = <MPMediaItemCollection: 0x13df04440>=========>prepareForSegue
saveValues()
▿ Optional<NSManagedObjectContext>
- Some : <NSManagedObjectContext: 0x13de88a60>
musicTemp = <MPMediaItemCollection: 0x13df04440>=========>saveValues
ModelName.Rule
Optional(<NSManagedObjectContext: 0x13de88a60>)
Number of rows = 1
Number of rows = 1
musicTemp = <MPMediaItemCollection: 0x13df04440>=========>RuleViewCell
mainManagedObjectContext.save
第一个记录创建结束。开始创建第二条记录,
musicTemp = <MPMediaItemCollection: 0x13dea7620>=========>prepareForSegue
saveValues()
▿ Optional<NSManagedObjectContext>
- Some : <NSManagedObjectContext: 0x13de88a60>
musicTemp = <MPMediaItemCollection: 0x13dea7620>=========>saveValues
ModelName.Rule
Optional(<NSManagedObjectContext: 0x13de88a60>)
2016-09-10 11:39:02.469 AppName[5237:2139350] -[MPMediaItemCollection compare:]: unrecognized selector sent to instance 0x13df04440
All Exceptions
error: use of undeclared identifier 'mainManagedObjectContext'
error: 1 errors parsing expression
应用程序崩溃!!
添加记录的相关代码,
// Method to save the extracted values to CoreData Objects
private func saveValues() {
// Initialize entity description
let RuleDescription = NSEntityDescription.entityForName("Rule",inManagedObjectContext:mainManagedObjectContext!)
let rule = Rule(entity: RuleDescription!, insertIntoManagedObjectContext: mainManagedObjectContext)
// Set object values from temporary variables
rule.music = musicTemp!
print("musicTemp = \(musicTemp!.count)=========>saveValues")
// Save the object in privateManagedObjectContext
print(NSStringFromClass(rule.classForCoder))
print(mainManagedObjectContext)
if ((mainManagedObjectContext?.hasChanges) != nil) {
do {
try mainManagedObjectContext?.save()
print("mainManagedObjectContext.save")
} catch let saveError as NSError {
print("(AddRuleViewController)(mainManagedObjectContext)saveError: \(saveError), \(saveError.userInfo)")
}
}
}
mainManagedObjectContext
是使用依赖注入引用的。我无法弄清楚为什么它能够第一次保存,但不能再次保存。实际上,它抱怨 mainManagedObjectContext
.
您的 musicTemp
变量似乎有些奇怪。
你很难转换它(这通常是一种代码味道)并且错误是围绕那个变量和它真正包含的对象。
指标为:
-[MPMediaItemCollection compare:]: unrecognized selector sent to instance 0x14ef90390
Core Data 正在尝试在 MPMediaItemCollection
对象上调用 compare:
,但 0x14ef90390
不是 MPMediaItemCollection
。
开始研究该变量并确保它确实如您所想。