好的,所以我是一个新手,尝试编写一个练习应用程序,单击一个按钮,出现一个NSOpenPanel
,选择一个图像文件,然后图像显示在NSImageView
中。
我的开放面板工作正常,它返回NSArray
的NSURLs
。我避免使用文件名路径,因为苹果文档说它已被贬值。然后,我尝试使用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/