0

私はココアとプログラミングに不慣れです、これが基本的なものであるならば申し訳ありません。

ARCを使用しています。DropZoneクラスによって制御されるNSImageViewコンポーネントがあります。画像をドラッグアンドドロップしますが、取得したscallingメソッドを呼び出そうとすると、「:ImageIO:CGImageSourceCreateWithDataデータパラメータはnilです」と表示されます。まだ何を知っています。

これがDropZone.mの私のメソッドです

- (void)scaleIcons:(NSString *)outputPath{
NSImage *anImage;
NSSize imageSize;
NSString *finalPath;

anImage = [[NSImage alloc]init];
anImage = image;
imageSize = [anImage size];
imageSize.width = 512;
imageSize.height = 512;
[anImage setSize:imageSize];

finalPath = [outputPath stringByAppendingString:@"/icon_512x512.png"];

NSData *imageData = [anImage TIFFRepresentation];
NSBitmapImageRep *rep = [NSBitmapImageRep imageRepWithData:imageData];
NSData *dataToWrite = [rep representationUsingType:NSPNGFileType properties:nil];
[dataToWrite writeToFile:finalPath atomically:NO];
}

DropZone.h

@interface DropZone : NSImageView <NSDraggingDestination>{
  NSImage *image;
}
- (void)scaleIcons:(NSString *)outputPath;
@end

これが私がそれを私のAppDelegate.mと呼ぶ方法です

- (IBAction)createIconButtonClicked:(id)sender {
NSFileManager *filemgr;
NSString *tempDir;

filemgr = [NSFileManager defaultManager];
tempDir = [pathString stringByAppendingString:@"/icon.iconset"];
NSURL *newDir = [NSURL fileURLWithPath:tempDir];
[filemgr createDirectoryAtURL: newDir withIntermediateDirectories:YES attributes: nil error:nil];
DropZone *myZone = [[DropZone alloc] init];
[myZone scaleIcons:tempDir];

NSAlert *alert = [[NSAlert alloc] init];
[alert setMessageText:@"Done!"];
[alert runModal];
}

画像はpastebaordから取得されます:

- (BOOL)performDragOperation:(id<NSDraggingInfo>)sender{
if ([NSImage canInitWithPasteboard:[sender draggingPasteboard]]) {
    image = [[NSImage alloc]initWithPasteboard:[sender draggingPasteboard]];
    [self setImage:image];
    [self setImageAlignment: NSImageAlignCenter];
    }
return YES;
}

どういうわけか私の「イメージ」が失われます。誰か助けてもらえますか?

4

2 に答える 2

1

問題は、アプリ デリゲートで DropZone の新しいインスタンスを作成していることですが、IB でイメージ ビューを作成し、そのクラスを DropZone に変更したと仮定しています。あれは正しいですか?その場合、IB のイメージ ビューに接続されたアプリ デリゲートに IBOutlet が必要であり、次のようにします。

    [self.iv scaleIcons:tempDir];

ここで、iv は IBOutlet です。

于 2013-01-09T00:18:14.177 に答える
0

「画像」がどこから来たのかわからなくても、あなたの問題はこれらの行にあると思います...

anImage = [[NSImage alloc]init];
anImage = image;

imageViewから画像を取得するだけです...

anImage = [myImageView image];
于 2013-01-09T00:02:32.383 に答える