приложение вылетает при завершении IKSlideshow;так же простой пример приложения - PullRequest
0 голосов
/ 15 мая 2011

У меня довольно маленькое приложение, которое показывает фотографии, хранящиеся на веб-сервере, которые вылетают, когда заканчивается слайд-шоу. Я использую IKSlideshow. Чтобы проиллюстрировать проблему, я написал новое приложение, которое больше ничего не делает, и оно тоже вылетает. Вот новое приложение. Большая часть кода была сгенерирована автоматически Xcode 4. Используя SDK 10.6, предназначенный для 10.6, работающий на 10.6, компилятор LLVM 2.0, 64-битный. Пробовал 32-битный, LLVM GCC 4.2, 10.5 SDK все в разных комбинациях и одно и то же.

Вот заголовочный файл:

#import <Cocoa/Cocoa.h>
#import <Quartz/Quartz.h>

@interface SlideshowTestAppDelegate : NSObject <NSApplicationDelegate, IKSlideshowDataSource> {
@private
    NSWindow *window;
}

@property (assign) IBOutlet NSWindow *window;
- (IBAction)action:(id)sender;

@end

и вот файл реализации:

#import "SlideshowTestAppDelegate.h"

@implementation SlideshowTestAppDelegate

@synthesize window;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
}

- (NSUInteger)numberOfSlideshowItems
{
    return 20;
}

- (id)slideshowItemAtIndex:(NSUInteger)index
{
    static NSURL *url = nil;
    if (url == nil)
        url = [[NSURL URLWithString:@"http://basepath.com/galleries/Anne%20U.%20White%20Trail/MJR_20070519_0537.jpg"] retain];
    return url; // show the same image over and over
}

- (IBAction)action:(id)sender
{
    [[IKSlideshow sharedSlideshow] runSlideshowWithDataSource:self inMode:IKSlideshowModeImages options:[NSDictionary dictionary]];
}

@end

Чтобы запустить слайд-шоу, вы выбираете File-New, который вызывает метод действия. Затем, пока слайд-шоу работает (оно начинается с паузы), вы нажимаете стрелку вправо на элементах управления слайд-шоу на экране в 10 раз быстрее, чем можете, а затем нажимаете клавишу Esc или нажимаете X. Приложение каждый раз вылетает. Информация о сбоях меняется, но несколько раз происходит сбой с этим сообщением на консоли:

SlideshowTest (3882,0x7fff702e6ca0) malloc: * ошибка для объекта 0x10056f110: освобожденный указатель не выделен * установить точку останова в malloc_error_break для отладки

Но диагностический вывод, который я получаю при сбое, не согласован.

Я использую одно и то же изображение для всех 20 слайдов, чтобы этому примеру было легко следовать. В моем реальном приложении все слайды разные.

Даже если вы быстро нажмете, слайд-шоу не должно произойти. Я не ожидаю, что мои пользователи сделают это, но в моем реальном приложении оно вылетает после того, как какое-то время (скажем, 10 минут), никогда, когда слайд-шоу действительно запускается, а только когда я его закрываю. (Не нажимая вперед; опять же, я просто придумал способ легко воспроизвести аварию.)

Это настолько простое приложение, что мне трудно поверить, что какие-то данные были распределены мной неправильно или что-то не сохранено.

У кого-нибудь еще были проблемы со сбоем IKSlideshow? Кто-нибудь видит что-то, чего я не вижу?

Спасибо!

Марк

ОБНОВЛЕНИЕ: Думая, что, возможно, делегат слайд-шоу и делегат приложения не должны быть одним и тем же объектом, я создал новый объект, который будет служить только в качестве делегата слайд-шоу, создал его и использовал его. Тот же сбой, что и раньше.

...