Ios 实例变量的奇怪行为-在某些时间无法访问
我遇到了一个奇怪的错误,如果我在闭包中检查PFObject是否存在,作为类(ImagePostStructure)实例变量的PFObject将奇怪地不存在。此外,通过闭包内部的外部变量引用该变量将在运行时修复该问题,但PFObject实例var仍然会消失,以后根本无法访问 下面是初始化PFObject的类的相关部分:Ios 实例变量的奇怪行为-在某些时间无法访问,ios,swift,parse-platform,xcode6,Ios,Swift,Parse Platform,Xcode6,我遇到了一个奇怪的错误,如果我在闭包中检查PFObject是否存在,作为类(ImagePostStructure)实例变量的PFObject将奇怪地不存在。此外,通过闭包内部的外部变量引用该变量将在运行时修复该问题,但PFObject实例var仍然会消失,以后根本无法访问 下面是初始化PFObject的类的相关部分: class ImagePostStructure { var myObj: PFObject? var image: UIImage? ...other
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);
}
}
以前,当我的'myObj'不是可选变量时,我得到的错误大致如下:
EXC_BAD_ACCESS (code=1, address=0x20)
我最好不要以这种方式编程,因为我一直在我的程序的其他地方使用“myObj”,它从地球表面消失给我带来了许多超出这种方法的问题
我已经对设置或移动“myObj”的位置进行了文本搜索,它只在程序的其余部分被读取(并且在创建对象后读取它的位置出错)。我还检查了“myObj”在执行时是否为nil,并在尝试读取变量时出错(因此“if(self.myObj)…..”出错)。左下角的变量管理器显示self当时有一个myObj,所以我认为它也不会被设置为nil
我试着查找这两个错误。对于第二个例子,我只发现了几个模糊的例子,这些例子似乎不相关,而第一个似乎只是暗示了地址不对齐的一般错误
这段代码以前也在Xcode6Beta3中工作过(我今天升级到了4),所以它肯定也是Xcode6Beta4所做的一个问题/事情…任何帮助都将不胜感激
编辑:我怀疑这是一个ARC错误,因为代码错误并不总是在同一行。出于某种原因,我怀疑PFObject正在被取消引用和分配,即使我的类与它有很强的连接…您正在使用哪个SDK?
我注意到Xcode6B4有一个bug,访问实例变量是一个问题,有时是不可能的。苹果开发者论坛上有几个帖子
你用Xcode6B3试过了吗?我不知道这是否是你出错的原因,但是你在闭包中使用了一个非弱引用
self
,这将导致一个强引用循环,如下所述:现在我用Xcode6B3,它在那里工作得很好。我现在把错误放在一边继续开发,当我回到更新或者6B5出来时,我最终会更新这个线程。我99%确定这是一个释放错误,因为当我运行闭包时,我在闭包中使用的变量被释放。
EXC_BAD_ACCESS (code=1, address=0x20)