Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSManagedObjectContext刷新对象中的EXC_错误访问_Ios_Swift_Core Data - Fatal编程技术网

Ios NSManagedObjectContext刷新对象中的EXC_错误访问

Ios NSManagedObjectContext刷新对象中的EXC_错误访问,ios,swift,core-data,Ios,Swift,Core Data,我继承了一些swift代码,它在从核心数据获取后立即执行refreshObject。正在获取的对象与另一个表有关系。fetch和refreshObject位于performBlockAndWait中。代码如下。这次崩溃似乎始于iOS9 知道为什么refreshObject抛出EXC\u BAD\u访问权限吗?解决办法是什么 获取后立即执行refreshObject的目的是什么?此表仅包含几行。这有必要吗?全部删除有什么缺点吗 context.performBlockAndWait {

我继承了一些swift代码,它在从核心数据获取后立即执行refreshObject。正在获取的对象与另一个表有关系。fetch和refreshObject位于performBlockAndWait中。代码如下。这次崩溃似乎始于iOS9

  • 知道为什么refreshObject抛出EXC\u BAD\u访问权限吗?解决办法是什么
  • 获取后立即执行refreshObject的目的是什么?此表仅包含几行。这有必要吗?全部删除有什么缺点吗

    context.performBlockAndWait {
        let className = self.className()
        let fetchRequest = NSFetchRequest(entityName: className)
        groups = (try? context.executeFetchRequest(fetchRequest)) as? [FavoriteLocationGroup]
        if groups != nil {
            groups!.sortInPlace { $0.name < $1.name }
            for group in groups! {
                context.refreshObject(group, mergeChanges: false) <<< crashes here
            }
        }
    }
    
    context.performBlockAndWait{
    让className=self.className()
    let fetchRequest=NSFetchRequest(entityName:className)
    groups=(try?context.executeFetchRequest(fetchRequest))作为?[FavoriteLocationGroup]
    如果组!=nil{
    组!.sortInPlace{$0.name<$1.name}
    一组一组{
    
    context.refreshObject(group,mergeChanges:false)能否尝试将sortInPlace行替换为

    groups = groups!.sort { $0.name < $1.name }
    
    groups=groups!.sort{$0.name<$1.name}
    
    我遇到了类似的问题。在调用sortInPlace后,该应用程序在随机位置的发布模式下崩溃。它似乎导致了某种内存损坏。sort()工作正常

    Upd:我能够用以下代码重现崩溃(在OS X Cocoa应用程序中也会崩溃):

    导入可可粉
    类MyObject{
    var x:Int?
    }
    @非应用程序主
    类AppDelegate:NSObject,NSApplicationDelegate{
    @IBVAR窗口:NSWindow!
    变量数组=[MyObject]()
    func ApplicationIDFinishLaunching(通知:NSNotification){
    //在此处插入代码以初始化应用程序
    
    对于0中的x..这不是swift而不是objc;)修复了问题和标记调用Refresh时上下文的值是什么以及what is group。您是否有对合并作出反应的通知观察者?“在获取后立即执行refreshObject的目的是什么?”没有我能想到的。如果可能的话,我想问问写它的人,或者查阅git历史记录(如果有的话)。它会将对象转化为错误,但是在获取之外和结果可能跨线程边界传递的块内部排序和错误是没有意义的。。。
    import Cocoa
    
    class MyObject {
        var x: Int?
    }
    
    @NSApplicationMain
    class AppDelegate: NSObject, NSApplicationDelegate {
    
        @IBOutlet weak var window: NSWindow!
    
        var array = [MyObject]()
    
        func applicationDidFinishLaunching(aNotification: NSNotification) {
            // Insert code here to initialize your application
    
            for x in 0..<100000 {
                let object = MyObject()
                object.x = x
                array.append(object)
            }
            array.sortInPlace { $0.x < $1.x } // CRASH
        }
        ...
    }