我的第一个问题。
我正在尝试创建一个简单的应用程序,它从一个位置接收图片,并将其放置在桌面上。我遇到的问题是这个错误:
2012-10-27 10:49:16.405 saveFile[3271:303] +[__NSCFConstantString scheme]: unrecognized selector sent to class 0x7fff73c01e38
2012-10-27 10:49:16.406 saveFile[3271:303] +[__NSCFConstantString scheme]: unrecognized selector sent to class 0x7fff73c01e38
在这一行:
CGImageRef imageItself = CGImageSourceCreateImageAtIndex(myImageSource, 0, NULL);
这是实际的代码:
标题文件:
#import <Cocoa/Cocoa.h>
//NSOpenPanel = use finder
NSOpenPanel *openPanel;
//URL is the directory
NSURL* theDoc;
//Don't allow bottom button to malfunction by being clicked early.
bool topButtonClicked = NO;
@interface saveFileAppDelegate : NSObject <NSApplicationDelegate>
- (IBAction)moveFile:(id)sender;
- (IBAction)chooseFile:(id)sender;
@property (nonatomic, retain) IBOutlet NSTextField *label;
@property (assign) IBOutlet NSWindow *window;
@end
.m文件:
#import "saveFileAppDelegate.h"
@implementation saveFileAppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
}
- (IBAction)chooseFile:(id)sender {
openPanel = [NSOpenPanel openPanel];
[openPanel beginWithCompletionHandler:^(NSInteger result){
if (result == NSFileHandlingPanelOKButton) {
theDoc = [[openPanel URLs] objectAtIndex:0];
[_label setStringValue:[NSString stringWithFormat:@"%@",theDoc]];
// Open the document.
topButtonClicked = YES;
}
}
];
}
- (IBAction)moveFile:(id)sender {
if (topButtonClicked == YES) {
//Take in picture
CGImageSourceRef myImageSource = CGImageSourceCreateWithURL((__bridge CFURLRef)(theDoc), NULL);
//CGImageRef myImage = CGImageSourceCreateImageAtIndex(myImageSource,0,NULL);
//Save picture to desktop
//Save where I wish to save the file
CFURLRef desktopURL = (CFURLRef)@"/Users/Ken/Desktop/";
//Save where I want to save, the type of file I expect to save, number of images to save, any additional options.
CGImageDestinationRef whereToSave = CGImageDestinationCreateWithURL(desktopURL, kUTTypeJPEG, 1, NULL);
//Create a reference to the image itself, take in the image read, which image (only one, so 0), and additional options.
CGImageRef imageItself = CGImageSourceCreateImageAtIndex(myImageSource, 0, NULL);
//Begin final preperations, pull altogether desktop URL, the image read in before, and additional options.
CGImageDestinationAddImage (whereToSave, imageItself, NULL);
//Finalize (write the file)
CGImageDestinationFinalize(whereToSave);
//CGImageDestinationRef saveImageToDesktop (CFURLRef desktop, CFStringRef jpeg, size_t count, CFDictionaryRef NULL);
}
else{
/* open an alert with an OK button */
NSAlert *alert = [[NSAlert alloc] init];
[alert setMessageText:@"Stop it."];
[alert runModal];
}
}
void CGImageDestinationAddImage (CGImageDestinationRef idst, CGImageRef image, CFDictionaryRef properties);
@end
答案 0 :(得分:2)
OP在这里。
我设法解决了这个问题。我让它更抽象,并尽可能地延长了每一种方法,所以我可以一步一步地看到它。我以为我会为那些偶然发现我问题的人发布我的修正案。
以下是.m:
中移动文件部分的结束代码- (IBAction)moveFile:(id)sender {
if (topButtonClicked == YES) {
//Take in picture
CFURLRef CFURLReftheDoc = (__bridge CFURLRef)theDoc;
CGImageSourceRef myImageSource = CGImageSourceCreateWithURL(CFURLReftheDoc, NULL);
//Create a reference to the image itself, take in the image read, which image (only one, so 0), and additional options.
CGImageRef imageItself = CGImageSourceCreateImageAtIndex(myImageSource, 0, NULL);
//Save picture to desktop
//Store desktop directory.
NSString *path = [@"~/Desktop/public.png" stringByExpandingTildeInPath];
NSURL *NSURLdesktopURL = [[NSURL alloc] initFileURLWithPath:path];
NSLog(@"%@",NSURLdesktopURL);
//store where I want to save, the type of file I expect to save, number of images to save, any additional options.
CGImageDestinationRef whereToSave = CGImageDestinationCreateWithURL((__bridge CFURLRef)NSURLdesktopURL, kUTTypeJPEG, 1, NULL);
// NSLog(@"%@",whereToSave);
//Begin final preperations, pull altogether desktop URL, the image read in before, and additional options.
CGImageDestinationAddImage (whereToSave, imageItself, NULL);
//Finalize (write the file)
CGImageDestinationFinalize(whereToSave);
//CGImageDestinationRef saveImageToDesktop (CFURLRef desktop, CFStringRef jpeg, size_t count, CFDictionaryRef NULL);
}
else{
/* open an alert with an OK button */
NSAlert *alert = [[NSAlert alloc] init];
[alert setMessageText:@"Stop it."];
[alert runModal];
}
}
@end