7

我正在玩 AppKit 和 NSDocument,但我不知道为什么这不起作用?:

我刚刚写了这个,图像不是零,但从不加载任何图像,它的大小总是为零。这是我必须实施的将文件读入文档的正确方法吗?我需要路径,而不是数据(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;
}

提前致谢。

4

2 回答 2

8

这样做:

NSImage *image = [[NSImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url]]];
于 2010-12-15T19:05:33.240 回答
6

如果从 NIB 文件加载 imageView,则在调用 readFromURL:ofType:error: 时不会设置它。相反,您应该加载图像并将其存储在实例变量中,然后在 windowControllerDidLoadNib: 方法中将其添加到 imageView。此外,您每次都返回错误,而只有在出现问题时才应返回错误。

- (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 *image; 实例变量到你的头文件。

于 2010-12-15T21:23:44.440 回答