1

これは、かなり長い間機能してきた関数 (Core Data に情報を挿入するのに非常に便利) です。Swift 3.0 に移行してから、問題が発生し、最初の行でクラッシュします。私は何か見落としてますか?

func insertObject<T:NSManagedObject>(_ entity:T.Type, dico:NSDictionary, notification:String!) -> NSManagedObject? {
    let entityName = entity.entityName
    let newItem = NSEntityDescription.insertNewObject(forEntityName: entityName, into:managedObjectContext!) as! T

    for (key, value) in dico {
        if let value:AnyObject = value as AnyObject? {
            (newItem as NSManagedObject).setValue(value, forKey: key as! String)
        }
    }

    do {try managedObjectContext!.save()
        // We may send a notification:
        if (notification != nil)
        {NotificationCenter.default.post(name: Notification.Name(rawValue: notification), object: nil)}
    } catch let error as NSError {print(error)}

    return newItem
}

デバッガコンソールに次のエラーが表示されます。

fatal error: Index out of range

そして、アセンブリ コードとともに次のことがわかります。

    0x1007811f8 <+116>: bl     0x100674b80               ; function signature specialization <preserving fragile attribute, Arg[1] = [Closure Propagated : reabstraction thunk helper from @callee_owned (@unowned Swift.UnsafeBufferPointer<Swift.UInt8>) -> () to @callee_owned (@unowned Swift.UnsafeBufferPointer<Swift.UInt8>) -> (@out ()), Argument Types : [@callee_owned (@unowned Swift.UnsafeBufferPointer<Swift.UInt8>) -> ()]> of generic specialization <preserving fragile attribute, ()> of Swift.StaticString.withUTF8Buffer <A> ((Swift.UnsafeBufferPointer<Swift.UInt8>) -> A) -> A
->  0x1007811fc <+120>: brk    #0x1
4

1 に答える 1