macos - NSOpenPanel 的 beginWithCompletionHandler block

标签 macos cocoa objective-c-blocks

我正在使用 NSOpenPanel 类的 beginWithCompletionHandler 。我的问题是项目属性是该 block 内的无效对象。我缺少什么?

 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]);
            }
        }

    }];

我用调试器屏幕截图解释我的问题

区 block 之前

http://img233.imageshack.us/img233/8982/schermata062455735alle1.png

此时一切正确,self=SpriteAnimation,project指向正确的Project实例。

http://img838.imageshack.us/img838/8982/schermata062455735alle1.png

如果这是状态之后

http://img855.imageshack.us/img855/8982/schermata062455735alle1.png

最佳答案

确切的错误消息是什么以及出了什么问题?

            [self.project addSprite:sprite];
            [p addSprite:sprite];

pself.project 将是同一个对象(除非您在其他地方做了一些事情来在分配 p 并运行该 block 的时间。

请注意,您还泄漏了 spriteaImage 引用的对象。

关于macos - NSOpenPanel 的 beginWithCompletionHandler block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6431381/

相关文章:

objective-c - 写入文件 Xcode MacOS

python - 什么是 Mac OS X 上 Python 的好 IDE?

macos - 自定义 NSButtonCell,drawBezelWithFrame 未调用

objective-c - 我是否需要释放 sortedArrayUsingDescriptors 返回的 NSArray?

objective-c - NSIncation 的实用函数

objective-c - 何时在 ARC 的对象引用上使用 __block 关键字

ruby-on-rails - 警告 : Nokogiri was built against LibXML version 2. 8.0,但已动态加载 2.7.8

objective-c - UI颜色对比

c - ^{ <stmts..> }() 在 C 中是什么意思?

ios - 从 tableView :cellForRowAtIndexPath: 内的 block 调用时,cellForRowAtIndexPath 始终为零