Я использую 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, проект указывает на правильный экземпляр проекта.
http://img838.imageshack.us/img838/8982/schermata062455735alle1.png >
После того, как это состояние
http://img855.imageshack.us/img855/8982/schermata062455735alle1.png >
[panel setAllowedFileTypes:[NSImage imageFileTypes]];
projects, укажите в ‹Project: 0x10051c530›. С точкой останова в строке[self.project addSprite:sprite];
я увидел, что проект0xc01c0000 does not appear to point to a valid object.
- person Luca Bartoletti   schedule 22.06.2011self.projects
изменится после того, как вы покажете панель, но до ее закрытия? - person   schedule 22.06.2011self
как экземплярNSOpenPanel
, потому чтоNSOpenPanel
вызывает ваш блок обработчика завершения. Однако это не означает, чтоself.project
не относится к экземпляруNSOpenPanel
. Вы пробовалиNSLog(@"%@", self.project);
внутри своего блока? - person   schedule 22.06.2011