title: EXC_BAD_ACCESS on [NSKeyedUnarchiver unarchiveObjectWithData:];
body: <p><strong>I found the answer after I set the bounty. If somebody has some useful comments on my approach (I don't know if it is the 'right' solution) he/she can have the bounty. If you're going to downvote my question, please leve a comment so I can improve future questions.</strong></p>
  
  <p>I'm currently learning Objective-C with the book <code>Cocoa Programming For Mac OS X</code> and it introduces archiving in chapter 10. I (AFAIK) did exactly what the author wants me to do, but when opening a file and thus unarchiving it the app crashes on the line:</p>
  
  <pre><code>array = [NSKeyedUnarchiver unarchiveObjectWithData:data];
  </code></pre>
  
  <p>It says <code>GDB received signal: EXC_BAD_ACCESS</code>. I have only encountered this when accessing an array slot that is out of bounds, and I believe <strong>I</strong> am not doing that. My best guess is that something behind the Cocoa scenes goes wrong, indirectly caused by me. What could this be?<br>
  As I said I am currently learning Objective-C (but I know Java), so don't expect me to know every obscure language feature.</p>
  
  <p>The file opening method (<code>MyDocument.m</code>):</p>
  
  <pre><code>- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError {
      NSMutableArray *array = nil;
      NSLog(@"data is %@", data);
  
      @try {
          array = [NSKeyedUnarchiver unarchiveObjectWithData:data]; // line of the EXC_BAD_ACCESS
      }
      @catch (NSException * e) {
          if (outError) {
              NSDictionary *d = [NSDictionary dictionaryWithObject:@"The data is corrupted." forKey:NSLocalizedFailureReasonErrorKey];
              *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:d];
          }
          return NO;
      }
      [self setEmployees:array];
      return YES;
  }
  </code></pre>
  
  <p>The file saving method (still <code>MyDocument.m</code>):</p>
  
  <pre><code>- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError {
      [[tv window] endEditingFor:nil]; // tv is my IBOutlet to an NSTableView
  
      return [NSKeyedArchiver archivedDataWithRootObject:employees];
  }
  </code></pre>
  
  <p>This is the stack trace (Thanks, H2CO3):</p>
  
  <pre><code>(gdb) bt
  #0  0x00007fff858da104 in objc_msgSend_vtable13 ()
  #1  0x00007fff858dcff5 in objc_getProperty ()
  #2  0x00000001000022cf in -[Person name] (self=0x1001d4480, _cmd=0x7fff89d1a790) at /Users/mauritsfriedrichkoelmans/Desktop/RaiseMan1/Person.m:14
  #3  0x00007fff86e79674 in -[NSObject(NSKeyValueCoding) valueForKey:] ()
  #4  0x00007fff86e7cfb8 in -[NSObject(NSKeyValueCoding) valueForKeyPath:] ()
  #5  0x00007fff897e10df in -[NSBinder valueForBinding:atIndex:resolveMarkersToPlaceholders:] ()
  #6  0x00007fff89682aa2 in -[NSValueBinder _adjustObject:mode:observedController:observedKeyPath:context:editableState:adjustState:] ()
  #7  0x00007fff897e0e75 in -[NSValueBinder updateTableColumnDataCell:forDisplayAtIndex:] ()
  #8  0x00007fff897e0d83 in -[NSTextValueBinder updateTableColumnDataCell:forDisplayAtIndex:] ()
  #9  0x00007fff897e0d30 in -[_NSBindingAdaptor tableColumn:willDisplayCell:row:] ()
  #10 0x00007fff896cab00 in -[NSTableView preparedCellAtColumn:row:] ()
  #11 0x00007fff896ca306 in -[NSTableView _dirtyVisibleCellsForKeyStateChange] ()
  #12 0x00007fff896c9e96 in -[NSTableView _windowChangedKeyState] ()
  #13 0x00007fff88ba0d3e in CFArrayApplyFunction ()
  #14 0x00007fff89611478 in -[NSView _windowChangedKeyState] ()
  #15 0x00007fff88ba0d3e in CFArrayApplyFunction ()
  #16 0x00007fff89611478 in -[NSView _windowChangedKeyState] ()
  #17 0x00007fff88ba0d3e in CFArrayApplyFunction ()
  #18 0x00007fff89611478 in -[NSView _windowChangedKeyState] ()
  #19 0x00007fff88ba0d3e in CFArrayApplyFunction ()
  #20 0x00007fff89611478 in -[NSView _windowChangedKeyState] ()
  #21 0x00007fff896c991f in -[NSFrameView _windowChangedKeyState] ()
  #22 0x00007fff89611171 in -[NSWindow _setFrameNeedsDisplay:] ()
  #23 0x00007fff8960f1d8 in -[NSWindow _makeKeyRegardlessOfVisibility] ()
  #24 0x00007fff8960f13e in -[NSWindow makeKeyAndOrderFront:] ()
  #25 0x00007fff89814401 in -[NSWindowController showWindow:] ()
  #26 0x00007fff897e5c5c in -[NSDocument showWindows] ()
  #27 0x00007fff899539c1 in -[NSDocumentController openDocumentWithContentsOfURL:display:error:] ()
  #28 0x00007fff89953072 in -[NSDocumentController _openDocumentsWithContentsOfURLs:display:presentErrors:] ()
  #29 0x00007fff8976eeda in -[NSApplication sendAction:to:from:] ()
  #30 0x00007fff8979346a in -[NSMenuItem _corePerformAction] ()
  #31 0x00007fff897931d4 in -[NSCarbonMenuImpl performActionWithHighlightingForItemAtIndex:] ()
  #32 0x00007fff89778e45 in -[NSMenu performKeyEquivalent:] ()
  #33 0x00007fff89777bed in -[NSApplication _handleKeyEquivalent:] ()
  #34 0x00007fff896486b9 in -[NSApplication sendEvent:] ()
  #35 0x00007fff895df6de in -[NSApplication run] ()
  #36 0x00007fff895d83b0 in NSApplicationMain ()
  #37 0x0000000100001e9b in main (argc=1, argv=0x7fff5fbff660) at /Users/mauritsfriedrichkoelmans/Desktop/RaiseMan1/main.m:13
  (gdb) 
  </code></pre>
  
  <p>The data object is <em>not</em> nil, <code>NSLog()</code>ed it.</p>