title: EXC_BAD_ACCESS when setting scalar property of Core Data object (IOS 5)
body: <p>I am running the following code in the IOS 5.1 simulator:</p>
  
  <pre><code>Table* sparkFront =
    [NSEntityDescription insertNewObjectForEntityForName:@"Table"
                                  inManagedObjectContext:_context];
  NSLog(@"%@", sparkFront);
  NSEntityDescription* entity = [NSEntityDescription entityForName:@"Table"
                                            inManagedObjectContext:_context];
  NSDictionary* dict = [entity propertiesByName];
  for (NSObject* key in [dict allKeys])
  {
    NSLog(@"%@", key);
  }
  sparkFront.columnValuesAddress = 0x606;
  </code></pre>
  
  <p>This code crashes with EXC_BAD_ACCESS on the last line. The Table object is a Core Data object implemented as follows:</p>
  
  <pre><code>@interface Table : NSManagedObject
  @property (nonatomic) int32_t columnValuesAddress;
  @end
  </code></pre>
  
  <p>I know Core Data doesn't natively do scalar types, but this is an IOS 5+ only app, and I was under the impression the un/boxing was done automatically. The output of the above code before the crash shows that my context and entity are good:</p>
  
  <pre><code>2012-07-20 22:17:52.714 otest[95147:7b03] &lt;NSManagedObject: 0x9c87b20&gt; (entity: Table; id: 0x9c86a80 &lt;x-coredata:///Table/t2C0D90D5-E381-4BD0-B65D-8FC83C6D50DB2&gt; ; data: {
  columnValuesAddress = 0;
  })
  2012-07-20 22:17:52.716 otest[95147:7b03] columnValuesAddress
  </code></pre>
  
  <p>After the crash, the problem report shows the following:</p>
  
  <pre><code>Application Specific Information:
  objc_msgSend() selector name: isNSNumber__
  Simulator libSystem was initialized out of order.
  
  
  Thread 0 Crashed:
  0   libobjc.A.dylib                 0x00635098 objc_msgSend + 12
  1   CoreData                        0x05c2e833 _PFManagedObject_coerceValueForKeyWithDescription + 483
  2   CoreData                        0x05bfe3d1 _sharedIMPL_setvfk_core + 209
  3   CoreData                        0x05c16687 _svfk_0 + 39
  4   ECMCalTests                     0x0187f8f1 -[ECMCalTests testInsertRecords] + 849 (ECMCalTests.m:73)
  5   CoreFoundation                  0x003f74ed __invoking___ + 29
  6   CoreFoundation                  0x003f7407 -[NSInvocation invoke] + 167
  7   SenTestingKit                   0x201039c4 -[SenTestCase invokeTest] + 184
  8   SenTestingKit                   0x20103868 -[SenTestCase performTest:] + 183
  9   SenTestingKit                   0x201034a9 -[SenTest run] + 82
  10  SenTestingKit                   0x20106db2 -[SenTestSuite performTest:] + 106
  11  SenTestingKit                   0x201034a9 -[SenTest run] + 82
  12  SenTestingKit                   0x20106db2 -[SenTestSuite performTest:] + 106
  13  SenTestingKit                   0x201034a9 -[SenTest run] + 82
  14  SenTestingKit                   0x20105e97 +[SenTestProbe runTests:] + 174
  15  CoreFoundation                  0x00492d51 +[NSObject performSelector:withObject:] + 65
  16  otest                           0x0000231c 0x1000 + 4892
  17  otest                           0x000025be 0x1000 + 5566
  18  otest                           0x00002203 0x1000 + 4611
  19  otest                           0x00001f8d 0x1000 + 3981
  20  otest                           0x00001f31 0x1000 + 3889
  </code></pre>
  
  <p>What am I doing wrong?</p>
  
  <p>UPDATE: I implemented the setter/getter for the property according to the core data tutorial. It still crashes. It never hits a breakpoint in the setter so it is crashing before it even calls the setter. Am I hitting a bug in Apple's code?</p>
  
  <pre><code>@interface Table : NSManagedObject
  {
    int32_t columnValuesAddress;
  }
  @property (nonatomic) int32_t columnValuesAddress;
  @end
  
  @implementation Table
  
  - (int32_t)columnValuesAddress
  {
    [self willAccessValueForKey:@"columnValuesAddress"];
    int32_t address = columnValuesAddress;
    [self didAccessValueForKey:@"columnValuesAddress"];
    return address;
  }
  
  - (void)setColumnValuesAddress:(int32_t)address
  {
    [self willChangeValueForKey:@"columnValuesAddress"];
    columnValuesAddress = address;
    [self didChangeValueForKey:@"columnValuesAddress"];
  }
  
  - (void)setNilValueForKey:(NSString *)key
  {
    if ([key isEqualToString:@"columnValuesAddress"])
    {
      self.columnValuesAddress = 0;
    }
    else
    {
      [super setNilValueForKey:key];
    }
  }
  
  @end
  </code></pre>