好的,所以我是一个新手,尝试编写一个练习应用程序,单击一个按钮,出现一个NSOpenPanel,选择一个图像文件,然后图像显示在NSImageView中。

我的开放面板工作正常,它返回NSArrayNSURLs。我避免使用文件名路径,因为苹果文档说它已被贬值。然后,我尝试使用NSImage创建一个initWithContentsOfURL对象,然后尝试将NSImageView的setImage设置为新图像。

我认为这是实施的相关部分...

   - (IBAction)openImage:(NSButton *)sender {
    NSLog(@"%@ was clicked", sender);

    NSOpenPanel *panel = [[NSOpenPanel alloc] init];

    if ([panel runModal] == NSModalResponseOK)
    {
        NSArray* selectedFile = [panel URLs];
        NSLog(@"%@ was selected", selectedFile[0]);
        NSImage *theImage = [[NSImage alloc] initWithContentsOfURL:selectedFile[0]];

        [imageViewer setImage:theImage];
        }
    }


并且从标题:

    @property (weak) IBOutlet NSImageView *imageViewer;
    - (IBAction)openImage:(NSButton *)sender;
   @end


当我尝试设置图像时,Xcode表示未声明imageViewer,并且想要将其更正为_imageViewer。我尝试遵循它的建议并运行它,但是一旦我从打开的面板中选择一个文件,该应用就会崩溃,因此显然仍然不正确。

NSLog行显示单击了按钮,并显示了所选文件的正确URL,但是在设置NSImageView时遇到问题。这可能真的很简单,但我似乎无法弄清楚。

最佳答案

您需要在标头(imageViewer.h中声明变量interface,例如:

@interface AppDelegate : NSObject <NSApplicationDelegate> {
     IBOutlet NSImageView *__weak imageViewer;
}
@property (weak) IBOutlet NSImageView *imageViewer;
- (IBAction)openImage:(NSButton *)sender;
@end


然后在您的类(.m)中,只合成变量:

@implementation AppDelegate
@synthesize imageViewer;

...


由于在declared中没有interface变量,因此收到错误。

关于objective-c - 从NSURL设置NSImageView的NSImage,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30475541/

10-13 08:31