Исключение в методе mouseDown - PullRequest
0 голосов
/ 20 июля 2010

Я делаю перетаскивание с 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: метод,из-за этого перетаскиваемое изображение постоянно появляется на экране, которое не исчезает, даже если выбрано какое-то другое окно.

Может кто-нибудь подсказать мне, почему оно происходит и как я могу его разрешить?

Спасибо,

Miraaj

1 Ответ

3 голосов
/ 20 июля 2010
exception:Invalid parameter not satisfying: theWriteStream != NULL

Такое исключение происходит из утверждения.Что-то собирается попробовать записать в поток, и утверждает, что у него есть поток для записи.Когда утверждение неверно, это означает, что условие не соответствует действительности;в данном случае это означает, что у него не было потока для записи.

Я не вижу никакого кода, связанного с потоком, в предоставленном вами примере, поэтому он находится либо в другом месте вашего приложения, либо где-то внутрирамки, которые вы используете.Вы должны включить «Остановка исключений Objective C» в XCode, затем запускать ваше приложение под отладчиком, пока не произойдет исключение, а затем посмотрите на трассировку стека в отладчике, чтобы увидеть, что именно вызвало исключение.

...