【问题标题】:Weird behavior with instance variable - cannot access at certain times实例变量的奇怪行为 - 在某些时候无法访问
【发布时间】:2014-07-22 21:16:48
【问题描述】:

我遇到了一个奇怪的错误,如果我在闭包中检查它是否存在,作为我的类 (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 实例变量。每当我尝试从类内部或外部访问“myObj”时,我得到的错误是:

EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

之前,当我让我的 'myObj' 不是可选变量之前,我得到的错误类似于:

EXC_BAD_ACCESS (code=1, address=0x20)

我最好不要以这种方式编程,因为我一直在我的程序中的其他地方使用“myObj”,它从地球上消失给我带来了这种方法之外的许多问题。

我已经对设置或移动“myObj”的位置进行了文本搜索,并且仅在程序的其余部分中读取它(并且在我制作对象后在任何地方读取它时都会出错)。我还检查了“myObj”在执行时是否为 nil,并且在尝试读取变量时出错(因此“if (self.myObj)...”出错)。左下角的变量 explorer 显示 self 当时有一个 myObj 所以我不认为它被设置为 nil 。

我已尝试查找这两个错误。对于第二个,我只发现了一些看起来无关紧要的晦涩实例,而第一个似乎暗示了地址未对齐的一般错误。

此代码之前在 Xcode 6 beta 3 中也有效(我今天升级到 4),所以它也一定是 Xcode6 beta 4 所做的问题/事情...任何帮助将不胜感激

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

【问题讨论】:

标签: ios swift parse-platform xcode6


【解决方案1】:

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

你用 Xcode6B3 试过了吗?

【讨论】:

  • 现在我将它与 Xcode6B3 一起使用,它在那里完美运行。我暂时搁置错误以继续开发,最终会在我返回更新或 6B5 出现时更新此线程。我 99% 确定这是一个释放错误,因为当我运行闭包时,我在闭包内使用的变量被释放。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-13
  • 1970-01-01
  • 2023-03-29
  • 2018-11-20
  • 2021-09-22
相关资源
最近更新 更多