2010-12-15 47 views
5

我玩了AppKit和NSDocument,我不知道这是为什么不工作?:NSURL→NSImage中→NSImageView

我只是写这一点,图像不为零,但从来没有加载任何图像,其大小为始终为零。 这是我必须实现的将文件读入我的文档的正确方法吗? 我需要的路径,而不是数据(NSData),因为我打算使用其他库来读取其他文件。

现在我正在尝试阅读PNG,JPG,没有任何工作。 (

- (BOOL) readFromURL:(NSURL *)url ofType:(NSString *)typeName error:(NSError **)outError{ 

    NSImage *image = nil; 
    image = [[NSImage alloc] initWithContentsOfURL:url]; 

    [imageView setImage:image]; 
    [image release]; 

    if (outError != NULL) { 
     *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL]; 
    } 
    return YES; 
} 

在此先感谢

+2

+1的使用→';) – Jakub 2010-12-15 20:01:53

回答

6

如果正在从NIB文件中加载的ImageView,它不会被设置时readFromURL:ofType: error:被调用,而应该加载图像并将其存储在实例变量中,然后将其添加到windowControllerDidLoadNib:方法中的imageView中,并且每次都返回一个错误,而只应返回一个错误if出了点问题

- (void)windowControllerDidLoadNib:(NSWindowController *)windowController { 
    [imageView setImage:image]; 
    [image release]; 
    image = nil; 
} 
- (BOOL)readFromURL:(NSURL *)url ofType:(NSString *)typeName error:(NSError **)outError { 
    image = [[NSImage alloc] initWithContentsOfURL:url]; 
    if(!image) { 
     if(outError) *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL]; 
     return NO; 
    } 
    return YES; 
} 

只要确保你添加一个NSImage *图像;实例变量添加到头文件中。

+1

很棒的回答。 “unimpErr”占位符错误等同于“未实现的错误”,这实际上只是在开发人员还没有完善该方法的情况下。在加载失败的图像的情况下,使用Cocoa的NS FileCorrupt 代码(对不起,不确定确切的枚举名称)可能更有意义。感谢它的工作, – NSGod 2010-12-15 21:34:11

+0

;) – nacho4d 2010-12-16 06:51:52

6

这样来做:

NSImage *image = [[NSImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url]]]; 
+1

我在Mac OS上,AppKit。因此,没有UIImage马特。编辑并测试了 – nacho4d 2010-12-15 19:28:34

+0

。这种方式将起作用。 – 2010-12-15 20:13:52