[Mono-osx] Problem canceling the opening of a NSDocument

Jon Lipsky jon.lipsky at elevenworks.com
Wed Apr 25 12:42:55 UTC 2012


Thanks Dan!

That worked like a charm!

On Apr 25, 2012, at 4:13 AM, Dan Fry wrote:

> Hello Jon,
> 
> I had a similar problem with a different method (ReadFromUrl) where Cocoa was supplying NULL for the outError parameter in some cases, and it's not possible to convert null to an "out NSError" parameter in C#.
> 
> In the end I just didn't use the method from MonoMac and defined my own like this:
> 
> [Export("readFromURL:ofType:error:")]
> private bool ReadFromUrl2(NSUrl absoluteUrl, string typeName, IntPtr pOutError)
> {
>     // Set this to an NSError object if an error occurs
>     NSError nsError;
> 
>     // ...
> 
>     // Write the error to the out parameter
>     if (pOutError != IntPtr.Zero)
>     {
>         if (nsError == null)
>         {
>             Marshal.WriteIntPtr(pOutError, IntPtr.Zero);
>         }
>         else
>         {
>             Marshal.WriteIntPtr(pOutError, nsError.Handle);
>         }
>     }
> }
> 
> Maybe not the best way of solving it, but it worked for me!
> 
> Dan
> 
> On 25/04/2012 05:03, Jon Lipsky wrote:
>> 
>> Hi All,
>> 
>> I'm running into a strange problem that I though perhaps someone else might have run into and might have a solution for.
>> 
>> If I were writing a document based application in Objective-C and wanted to the user to be able to cancel the opening of a document, I could do something like this (which I can confirm works fine):
>> 
>> - (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError
>> {
>>     // Loading code here...
>> 
>>     *outError = [NSError errorWithDomain:NSCocoaErrorDomain code:NSUserCancelledError userInfo:nil];
>>     return NO;
>> }
>> 
>> The (what seems to me) obvious thing to do in MonoMac would be to implement this:
>> 
>> public override bool ReadFromData (NSData data, string typeName, out NSError outError)
>> {
>>  // Loading code here...
>> 
>>  outError = NSError.FromDomain(NSError.CocoaErrorDomain,1376);
>>  return false;
>> }
>> 
>> However, when I do so, my app crashes with the following stack trace:
>> 
>> #0  0x9287dfd5 in __wait4 ()
>> #1  0x93be04ec in waitpid$UNIX2003 ()
>> #2  0x0009fe9b in mono_handle_native_sigsegv (signal=11, ctx=0xbfffea5c) at mini-exceptions.c:2192
>> #3  0x00004f6e in mono_sigsegv_signal_handler (_dummy=10, info=0xbfffea1c, context=0xbfffea5c) at mini.c:5917
>> #4  <signal handler called>
>> #5  0x9249cd44 in objc_msgSend ()
>> #6  0x991622cc in -[NSDocumentController(NSInternal) _fixedFailureReasonFromError:] ()
>> #7  0x9916b5f4 in -[NSDocumentController _willPresentOpeningError:forURL:] ()
>> #8  0x9916b197 in -[NSDocumentController _openDocumentsWithContentsOfURLs:presentErrors:completionHandler:] ()
>> #9  0x9915f749 in -[NSDocumentController openDocument:] ()
>> (Rest of stack trace omitted)
>> 
>> Has anyone else run into this problem, and if so were you able to find a solution/workaround?
>> 
>> Thanks,
>> Jon...
>> 
>> 
>> _______________________________________________
>> Mono-osx mailing list
>> Mono-osx at lists.ximian.com
>> http://lists.ximian.com/mailman/listinfo/mono-osx
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ximian.com/pipermail/mono-osx/attachments/20120425/08b5f95f/attachment.html>


More information about the Mono-osx mailing list