实例变量的奇怪行为 - 在某些时候无法访问

时间:2014-07-22 21:16:48

标签: ios swift parse-platform xcode6

我遇到了一个奇怪的错误,如果我在闭包中检查它是否存在,那么作为我的类(ImagePostStructure)的实例变量的PFObject会奇怪地不存在。另外,从闭包内部通过外部变量引用该变量将在运行时修复该问题,但PFObject实例var仍然会消失,以后无法访问。

以下是我的类初始化PFObject的相关部分:

class ImagePostStructure {

    var myObj: PFObject?
    var image: UIImage?
    ...other variables...
    init(inputObj: PFObject) {
        //called when retrieving object (for viewing, etc)
        myObj = inputObj;
        ...
    }

以下是同一类中的一个方法,我从PFObject加载一个图像文件。

func loadImage(finishFunction: (imgStruct: ImagePostStructure, index: Int)->Void, index: Int) {
    if (!image) {
        var imgFile: PFFile = myObj!["imageFile"] as PFFile;
        //comment immediate line below
        var obj = self.myObj;   //<----setting an external reference for my closure
        imgFile.getDataInBackgroundWithBlock( { (result: NSData!, error: NSError!) in
            if (!error) {
                //get file objects
                self.image = UIImage(data: result);
                NSLog("This runs: \(self)");

                //comment immediate line below
                NSLog("This also runs \(obj)");  //<----commenting this causes error

                NSLog("This does NOT run if above is NOT commented \(self.myObj!)");
                NSLog("This does NOT run if above is NOT commented \(self.myObj!.objectId)");

                finishFunction(imgStruct: self, index: index);
            }
        });
    }
    else {
        finishFunction(imgStruct: self, index: index);
    }
}

如果我在NSLog中注释引用PFObject实例变量的行,那么我就不能再从self访问PFObject实例变量了。每当我尝试访问&#34; myObj&#34;时,无论是在课堂内部还是在课堂内部,我得到的错误都是:

EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

之前,当我有我的'myObj&#39;以前不是一个可选变量,我得到的错误是:

EXC_BAD_ACCESS (code=1, address=0x20)

我最好不想以这种方式编程,因为我一直在使用&#34; myObj&#34;在我的计划中的其他地方,它从地球表面消失,这导致了我超出这种方法的许多问题。

我已经在&#34; myObj&#34;正在设置或移动,它只在程序的其余部分被读取(并且在我制作对象后,无论我在哪里读取它都会出错)。我还检查了是否&#34; myObj&#34;在那个执行点上是零,并且它试图读取变量时出错(所以&#34; if(self.myObj)......&#34;错误)。左下角的变量资源管理器显示自己当时有一个myObj,所以我认为它也没有设置为nil。

我试过查找这两个错误。对于第二个,我只发现了几个看似无关紧要的模糊实例,而第一个似乎暗示了地址错位的一般错误。

此代码之前也曾在Xcode 6 beta 3中运行(我今天升级到4),因此它也必须是Xcode6 beta 4所做的问题/事情......任何帮助都将受到赞赏

编辑:我怀疑这是一个ARC错误,因为代码错误并不总是在同一行。出于某种原因,我怀疑PFObject正被解除引用并取消分配,即使我的班级与它有很强的联系......

1 个答案:

答案 0 :(得分:0)

你正在使用哪个SDK? 我注意到Xcode6B4有一个错误,访问实例变量是一个问题,有时是不可能的。苹果开发人员论坛中有几个主题。

您是否尝试使用Xcode6B3?