我正在使用NSOpenPanel类的beginWithCompletionHandler。我的问题是projects属性是该块内的无效对象。我错过了什么?
NSOpenPanel *panel = [NSOpenPanel openPanel];
[panel setCanChooseDirectories:NO];
[panel setAllowedFileTypes:[NSImage imageFileTypes]];
[panel beginWithCompletionHandler:^(NSInteger result)
{
if (result==NSFileHandlingPanelOKButton)
{
NSString *name = [panel.URL lastPathComponent];
NSImage *aImage = [[NSImage alloc] initWithContentsOfURL:panel.URL];
if (aImage)
{
DLog(@"Success: %@", name);
Sprite *sprite = [[Sprite alloc] init];
[self.project addSprite:sprite];
}
else
{
DLog(@"Error, i can't load image %@ at path %@", name, [panel.URL path]);
}
}
}];
我用调试器截图解释我的问题
阻止之前
http://img233.imageshack.us/img233/8982/schermata062455735alle1.png
此时一切正确,self = SpriteAnimation,项目指向正确的Project实例。
http://img838.imageshack.us/img838/8982/schermata062455735alle1.png
if if is the state
之后http://img855.imageshack.us/img855/8982/schermata062455735alle1.png
答案 0 :(得分:1)
确切的错误信息是什么?出了什么问题?
[self.project addSprite:sprite];
[p addSprite:sprite];
p
和self.project
都将是同一个对象(除非你在其他地方做了一些事情,要在project
被分配的时间和那个块之间重新分配p
跑了。
请注意,您还泄漏了被称为sprite
和aImage
的对象。