【问题标题】:bad exception when inserting new entity插入新实体时出现错误异常
【发布时间】:2015-04-27 11:06:27
【问题描述】:

当我在核心数据中插入新实体时,出现异常错误的访问代码 2。

    class func createInManagedObjectContext(moc: NSManagedObjectContext, fuel_id: Int, fuel_name: String, price: Double) -> Fuel

    {
        var fuel = NSEntityDescription.insertNewObjectForEntityForName("GasStation", inManagedObjectContext: moc) as Fuel //exception - EXC_ARM_BREAKPOINT

        moc.performBlockAndWait { () -> Void in
            fuel.fuel_id = fuel_id
            fuel.fuel_name = fuel_name
            fuel.price = price

        }

//        dispatch_async(dispatch_get_main_queue(), { () -> Void in
//            fuel.fuel_id = fuel_id
//            fuel.fuel_name = fuel_name
//            fuel.price = price
//
//        })


        return fuel
    }

if let prices = info["prices"] as? NSArray {
     for price in prices {
     let fuelId : Int = price["fuel_id"] as Int
     var fuelPriceString : String = price["price"] as String
     let fuelName : String = price["fuel_name"] as String
     var fuelPrice : Double = NSString(string:fuelPriceString).doubleValue


     println(managedObjectContext)

     var fuel =
Fuel.createInManagedObjectContext(managedObjectContext!,fuel_id: Int64(fuelId), fuel_name: fuelName, price:fuelPrice)// exception
     fuelSet.append(fuel)
          }
     println(fuelSet)
}

我试图查看上下文是否为零,但它有地址。我读了一些关于僵尸工具的文章,用于检测你有什么确切的异常以及为什么,但没有说明。有人可以帮助我吗,因为我真的被卡住了?

【问题讨论】:

标签: ios exception core-data exc-bad-access


【解决方案1】:

您需要确保满足以下条件之一:

  • 您的 managedObjectContext 是 NSMainQueueConcurrencyType 之一(而不是 比 NSPrivateQueueConcurrencyType )
  • 在 performBlock 或 performBlockAndWait 中执行更改

所以:

var fuel
moc.performBlockAndWait { () -> Void in
    fuel = NSEntityDescription.insertNewObjectForEntityForName("GasStation", inManagedObjectContext: moc) as Fuel
    fuel.fuel_id = fuel_id
    fuel.fuel_name = fuel_name
    fuel.price = price
}
return fuel

(希望很容易翻译成 Swift)基本上,如果您在私有队列上下文中,请确保您不要从主线程(例如 UI 代码等)访问它,这适用于读取和写入。如果您在私有队列中创建它,请小心从主线程中读取新创建的对象。

我建议花一些时间阅读它并尝试看看痛点在哪里。从长远来看,它将为您节省时间!

http://code.tutsplus.com/tutorials/core-data-from-scratch-concurrency--cms-22131 https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/Articles/cdConcurrency.html

【讨论】:

  • 你是对的,我的 exc no 在下一行。那么解决方案是什么?
  • 不幸的是,这两种方法我都试过了,但对解决我的问题没有帮助
  • 它仍然会在fuel.id =fuel_id 或fuel.name(以先到者为准)上爆炸?还是其他地方?
  • 在帖子顶部添加了代码。它运行所有循环,打印我试图保存在 for-cycle 中的所有数据,并用 exc 进行炸弹
  • 另一个编辑...可能除此之外它可能是我不知道的 Swift-y。但它看起来很像我在匆忙处理事情时遇到的核心数据线程/队列错误。
猜你喜欢
  • 2017-02-20
  • 2013-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多