0

NSViewでドラッグアンドドロップをしています。

NSViewのサブクラスであるドラッグ対象のオブジェクトに、以下のようにmouseDown:メソッドを実装しました。

@try {
    NSPoint location; 
    NSSize size ;
    NSPasteboard *pb = [NSPasteboard pasteboardWithName:@"CameraIconContainer"];

    location.x =  ([self bounds].size.width - size.width)/2 - 21.0;
    location.y =  ([self bounds].size.height - size.height)/2 - 7.0;

    NSLog(@"mouseDown: location- (%f, %f)",location.x,location.y);


    NSDictionary *iconViewDict = [[NSDictionary alloc] initWithObjectsAndKeys:[cameraNo stringValue],@"cameraNo",nil];
    NSLog(@"iconViewDict - %@",iconViewDict);

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:iconViewDict];


    [pb declareTypes:[NSArray arrayWithObject:IconDragDataType] owner:self];
    [pb setData:data forType:IconDragDataType];
    [self dragImage:[NSImage imageNamed:@"camera_icon.png"] at:location offset:NSZeroSize event:e pasteboard:pb source:self slideBack:YES];
}
@catch (NSException * e) {
    NSLog(@"CameraIconView (-mouseDown:), error - %@",e);
}

ほとんどの場合は正常に動作していますが、問題は - 時々これを上げていることです

例外: 満たさない無効なパラメーター: theWriteStream != NULL

mouseDown: メソッドでは、ドラッグされた画像が画面上に継続的に表示され、他のウィンドウが選択されても消えません。

なぜそれが発生しているのか、どうすれば解決できるのか教えてもらえますか?

ありがとう、

ミラージ

4

1 に答える 1

3
exception:Invalid parameter not satisfying: theWriteStream != NULL

その種の例外は、アサーションから発生します。何かがストリームに書き込もうとしており、書き込み先のストリームがあると主張しました。アサーションが失敗した場合、それは条件が真でなかったことを意味します。この場合、書き込み先のストリームがなかったことを意味します。

提供されたサンプルにはストリーム関連のコードが表示されないため、アプリ内の別の場所か、使用しているフレームワーク内のどこかにあります。Xcode で「Objective-C 例外で停止」をオンにし、例外が発生するまでアプリをデバッガーで実行してから、デバッガーでスタック トレースを調べて、何が例外をスローしたかを正確に確認する必要があります。

于 2010-07-20T08:59:34.093 に答える