Re: Accessing a managedObject property from within an accessor of another property
Re: Accessing a managedObject property from within an accessor of another property
- Subject: Re: Accessing a managedObject property from within an accessor of another property
- From: Brad Stone <email@hidden>
- Date: Wed, 23 Feb 2011 12:57:29 -0500
[A]nd then it occurred to me that a computer is a stupid machine with the ability to do incredibly smart things, while computer programmers are smart people with the ability to do incredibly stupid things. They are, in short, a perfect match. ~Bill Bryson
On Feb 22, 2011, at 11:42 PM, Quincey Morris wrote:
> That's a lot of information you posted. :)
>
> Unfortunately, *based on the posted information* there's nothing obviously wrong except that you've shot yourself in the foot using the debugger. Let's look, for example, at what one of the backtraces is telling you. You triggered this by typing 'po self' in the debugger:
>
> On Feb 22, 2011, at 19:34, Brad Stone wrote:
>
>> Breakpoint 28, -[SRMainWindowController toggleLock:] (self=0x2000df5e0, _cmd=0x1000a9239, sender=0x2000df5e0) at SRMainWindowController.m:2897
>> 2897 [note setIsEncrypted:[NSNumber numberWithBool:YES]];
>> The program being debugged stopped while in a function called from GDB.
>> When the function (_NSPrintForDebugger) is done executing, GDB will silently
>> stop (instead of continuing to evaluate the expression containing
>> the function call).
>
> A function called from the debugger as a result of 'po self' failed. What function? It's not clear yet, but it *is* clear what failed -- that function directly or indirectly called 'toggleLock:' *again* -- the method you were in when you started all this debugging activity. Why did it stop? It hit the breakpoint that you put in that code.
>
> This backtrace is enlightening, unlike the earlier ones, because it shows what the debugger was trying to do:
>
>> Here's a backtrace right after po #3 before I'm out of setIsEncrypted
>> backtrace
>> #0 -[SRMainWindowController toggleLock:] (self=0x2000df5e0, _cmd=0x1000a9239, sender=0x2000df5e0) at SRMainWindowController.m:2897
>> #1 0x000000010002dae9 in -[SRMainWindowController getEncryptionKey] (self=0x2000df5e0, _cmd=0x1000a7210) at SRMainWindowController.m:2948
>> #2 0x00000001000098d2 in -[Note category] (self=0x20027bda0, _cmd=0x7fff85450184) at Note.m:257
>> #3 0x00000001000089c8 in -[Note description] (self=0x20027bda0, _cmd=0x7fff83c821e8) at Note.m:56
>
> The debugger was trying to execute [note description], which is what it does to get a description to display as a result of 'po note'. Normally, the standard 'description' in NSObject is called, which just prints the address of the object and its class. You, apparently have overridden 'description' in the Note class, and it apparently invokes 'category', which invokes '-[SRMainWindowController getEncryptionKey]', which invokes 'toggleLock:', which is why it hits the breakpoint again.
>
> Note that (apparently) if isEncrypted is NO, then 'getEncryptionKey' isn't invoked, and so 'toggleLock' isn't invoked either. That's why setting "isFlagged" instead didn't crap out in the debugger.
>
> Other than indicating an inappropriate design of your 'description' override, there's absolutely no indication of anything wrong here at all. It looks like you've been chasing a chimera. :)
>
> Obviously I may be overlooking something, but step 1 is to fix your 'description' method so that it doesn't cause Core Data fetches.
>
>> #4 0x00007fff868a386b in _NSPrintForDebugger ()
>> #5 <function called from gdb>
>> #6 -[Note setIsEncrypted:] (self=0x20027bda0, _cmd=0x1000a6eb8, value=0x7fff70886280) at Note.m:206
>> #7 0x000000010002d5c9 in -[SRMainWindowController toggleLock:] (self=0x2000df5e0, _cmd=0x1000a9239, sender=0x2000867e0) at SRMainWindowController.m:2897
>> #8 0x00007fff83b2afbf in -[NSToolbarButton sendAction:to:] ()
>> #9 0x00007fff8379c135 in -[NSToolbarItemViewer mouseDown:] ()
>> #10 0x00007fff8368934f in -[NSWindow sendEvent:] ()
>> #11 0x00007fff835bea86 in -[NSApplication sendEvent:] ()
>> #12 0x00007fff835554da in -[NSApplication run] ()
>> #13 0x00007fff8354e1a8 in NSApplicationMain ()
>> #14 0x0000000100006b60 in main (argc=1, argv=0x7fff5fbff628) at main.m:13
>
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden