managedObjectContext不能多次使用?

时间:2016-09-09 05:05:14

标签: ios swift core-data nsmanagedobjectcontext

我有一个使用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 

App崩溃!!

添加记录的相关代码,

// 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

1 个答案:

答案 0 :(得分:1)

您的musicTemp变量似乎有些奇怪。

你很难施展它(这通常是代码味道),错误是围绕该变量及其真正包含的对象。

指标是:

-[MPMediaItemCollection compare:]: unrecognized selector sent to instance 0x14ef90390

核心数据正试图在compare:对象上调用MPMediaItemCollection,但0x14ef90390不是MPMediaItemCollection

开始调查该变量并确保它确实是您认为的。