Блоки для beginWithCompletionHandler от NSOpenPanel - PullRequest
1 голос
/ 22 июня 2011

Я использую beginWithCompletionHandler класса NSOpenPanel. Моя проблема в том, что атрибут проектов является недопустимым объектом внутри этого блока. Чего мне не хватает?

 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

После, если это состояние

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

1 Ответ

1 голос
/ 22 июня 2011

Что такое точное сообщение об ошибке и что идет не так?

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

И p, и self.project будут одним и тем же объектом (если вы не сделали что-то еще, чтобы переназначить project между временем, назначенным p, и тем блоком был выполнен.

Обратите внимание, что вы также пропускаете объекты, которые называются sprite и aImage.

...