IKSlideshow终止时app崩溃;一个简单的示例应用也是如此

时间:2011-05-15 19:05:17

标签: objective-c cocoa macos sdk slideshow

我有一个相当小的应用程序,显示存储在Web服务器上的照片,当它的幻灯片部分终止时崩溃。我使用IKSlideshow。为了说明这个问题,我写了一个新的应用程序,它没有做任何其他事情,它也崩溃了。这是新的应用程序。大多数代码都是由Xcode 4自动生成的。使用10.6 SDK,目标是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,它会调用action方法。然后,当幻灯片显示正在运行(它开始暂停)时,您可以尽快单击幻灯片显示屏幕上的右箭头控制10次,然后键入Esc或单击X.应用程序每次崩溃。崩溃时的信息会有所不同,但有几次它会在控制台上显示此消息:

SlideshowTest(3882,0x7fff702e6ca0)malloc: *对象0x10056f110的错误:未释放指针被释放 * 在malloc_error_break中设置断点以进行调试

但崩溃后得到的诊断输出不一致。

我只对所有20张幻灯片使用相同的图像,以便使这个例子易于理解。在我的实际应用中,幻灯片都是不同的。

即使你快速点击,幻灯片也不应该崩溃。我不希望我的用户这样做,但在我的实际应用程序中,它在运行一段时间后崩溃应用程序(10分钟说),从未在幻灯片显示实际运行时,但仅在我退出时。 (没有点击前进;再次,这只是我想出的一种方法,可以轻松地重现崩溃。)

这是一个非常简单的应用程序,我很难相信我错误地分配了任何数据或者没有保留任何数据。

有没有其他人遇到IKSlideshow崩溃的问题?有人看到我没看到的任何东西吗?

谢谢!

马克

更新:认为幻灯片代理和app委托可能不是同一个对象,我创建了一个新对象,仅作为幻灯片代理服务,实例化并使用它。和以前一样崩溃。

0 个答案:

没有答案