我制作了一款基本上运行NSTask的Mac OS X应用程序。问题是,我创建了一个名为XXTask的类来处理文件,还有一个名为XXController的类来处理GUI中的拖放并要求XXTask偶尔处理一个文件。
我过去做过几乎一样的事情,并且工作得很好。这一次,我添加了一个委托协议,并使XXController成为XXTask的代表。
当XXTask失败时,我要求代理人显示一个特定的视图,然后调用这样的方法:
[delegate showView];
这样可行,但是当尝试使用我在第一次启动时存储的信息重新启动时,应用程序会输出错误。我使用NSLog来查看到底出了什么问题,看起来好像三个实例变量(两个NSStrings和一个NSMutableArray)都是(null)。
以下是三个实例变量:
NSString *curFilePath;
NSArray *lastArgs;
NSString *lastLaunchPath;
我按照以下方式创建:
curFilePath = filename;
// filename is an NSString passed to the method where I first create curFilePath
// the object passed to the method is a retained NSString (an instance variable of XXController)
lastArgs = [[NSMutableArray arrayWithObjects:curFilePath, [curFilePath stringByDeletingLastPathComponent], nil] retain];
lastLaunchPath = [[[NSBundle mainBundle] pathForResource:@"xxtask" ofType:@""] retain];
所有三个变量都是null,但XXTask对象不是,因为它仍然可以执行代码。
错误:
2011-01-15 16:38:57.233 App[24179:a0f] PATH : (null)
2011-01-15 16:40:52.846 App[24212:a0f] LAST ARGS : (null)
2011-01-15 16:40:52.847 App[24212:a0f] LAST LP : (null)
2011-01-15 16:40:52.847 App[24212:a0f] Exception detected while handling key input.
2011-01-15 16:40:52.848 App[24212:a0f] *** -[NSCFArray insertObject:atIndex:]: index (1) beyond bounds (1)
当我不通过调用委托来绘制视图时,一切都很好。我可以将该视图方法放在XXTask类中,但我宁愿首先找到一个简洁的解释。当我给代表打电话时会发生什么? (这是我第一次尝试使用委托协议)
感谢您的回答!
如果这段代码看起来很糟糕,我有两个借口:
答案 0 :(得分:0)
如果我理解这是正确的(没有任何代码就很难)你存储了XXTask中的一些信息,对吗?
您保留/复制数据吗?如果没有,它会在XXTask发布后立即释放。 如果我误解了你的问题,我会要求你提供一些证明你问题的代码。这使得查找错误变得更加容易。