• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
IPhone- Datasensitive bug from CoreData...
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

IPhone- Datasensitive bug from CoreData...


  • Subject: IPhone- Datasensitive bug from CoreData...
  • From: Brian Bruinewoud <email@hidden>
  • Date: Fri, 25 Dec 2009 16:40:59 +1100

This has me totally stumped.

I have an app that contains (currently) three Entities:
Person
Deed; and
DeedDoneByPerson

Deed is effectively a template object. I'll probably re-do the object model but I want to understand what's going on with this bug first.

Deeds can be good or not and have a degree of goodness.

Here is the code that creates a new deed and deedDoneByPerson:

        NSManagedObject *newDeed = [ NSEntityDescription insertNewObjectForEntityForName: @"Deed"
                                                                  inManagedObjectContext: context ];

        int score;
        if( self.isGood )  score =   sender.tag;
        else               score = - sender.tag;

        [newDeed setValue: self.deedName.text                               forKey: @"deedName" ];
        [newDeed setValue: [ NSNumber numberWithBool: self.isGood         ] forKey: @"isGood"   ];
        [newDeed setValue: [ NSNumber numberWithInt:  score               ] forKey: @"points"   ];

        NSManagedObject *newDeedDoneByPerson = [ NSEntityDescription insertNewObjectForEntityForName: @"DeedDoneByPerson"
                                                                              inManagedObjectContext: context ];

        [newDeedDoneByPerson setValue: newDeed                                  forKey: @"deedDone" ];
        [newDeedDoneByPerson setValue: selectedPerson                           forKey: @"byPerson" ];
        [newDeedDoneByPerson setValue: [ NSNumber numberWithBool: self.isGood ] forKey: @"isGood"   ];
            // let 'points' and 'instances' default

        FYI2( @":: Create new deed [%@]", self.deedName.text );
        NSError *error;
        if (![context save:&error]) //!!!!!!! CRASHES HERE !!!!!!!!
        {
            NSLog(@"!! Unresolved error %@, %@", error, [error userInfo]);
            abort();
        }


The following scenarios work:
With a fresh app (deleted from the simulator and re-installed), create a person and add any number of bad deeds to that person - they are displayed correctly and sqlite has the expected contents.
With a fresh app (deleted from the simulator and re-installed), create a person and add any number of good deeds to that person - they are displayed correctly and sqlite has the expected contents.
With a fresh app (deleted from the simulator and re-installed), create a person and add any number of bad deeds to that person - they are displayed correctly and sqlite has the expected contents. Then create another person and add any number of good deeds to that person -  they are displayed correctly and sqlite has the expected contents

The following scenario does NOT work:
With a fresh app (deleted from the simulator and re-installed), create a person and add a bad deed to that person then attempt to add a good deed. BOOM

Stack trace:
#0	0x93affedb in objc_msgSend
#1	0x939f4b6c in ??
#2	0x0001763a in _nsnote_callback
#3	0x01d34005 in _CFXNotificationPostNotification
#4	0x00014ef0 in -[NSNotificationCenter postNotificationName:object:userInfo:]
#5	0x01ba717d in -[NSManagedObjectContext(_NSInternalNotificationHandling) _postObjectsDidChangeNotificationWithUserInfo:]
#6	0x01c06763 in -[NSManagedObjectContext(_NSInternalChangeProcessing) _createAndPostChangeNotification:withDeletions:withUpdates:withRefreshes:]
#7	0x01b8b5ea in -[NSManagedObjectContext(_NSInternalChangeProcessing) _processRecentChanges:]
#8	0x01bc1728 in -[NSManagedObjectContext save:]
#9	0x00005434 in -[NewDeedViewController commit:] at NewDeedViewController.m:131 <------------------- CODE ABOVE
#10	0x00298459 in -[UIApplication sendAction:to:from:forEvent:]
#11	0x002fbba2 in -[UIControl sendAction:to:forEvent:]
#12	0x002fddc3 in -[UIControl(Internal) _sendActionsForEvents:withEvent:]
#13	0x002fcb0f in -[UIControl touchesEnded:withEvent:]
#14	0x002b1e33 in -[UIWindow _sendTouchesForEvent:]
#15	0x0029b81c in -[UIApplication sendEvent:]
#16	0x002a20b5 in _UIApplicationHandleEvent
#17	0x0252cef1 in PurpleEventCallback
#18	0x01d40b80 in CFRunLoopRunSpecific
#19	0x01d3fc48 in CFRunLoopRunInMode
#20	0x0252b7ad in GSEventRunModal
#21	0x0252b872 in GSEventRun
#22	0x002a3003 in UIApplicationMain
#23	0x00001cb4 in main at main.m:14

I don't understand how the value of 'score' breaks things. If I get rid of the negation in this code:
        int score;
        if( self.isGood )  score =   sender.tag;
        else               score = - sender.tag;
everything works fine: adding good and bad to the same person is acceptable.

Any suggestions on what to investigate?


_______________________________________________

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

  • Follow-Ups:
    • Re: IPhone- Datasensitive bug from CoreData...
      • From: Alexander Spohr <email@hidden>
    • Re: IPhone- Datasensitive bug from CoreData...
      • From: Brian Bruinewoud <email@hidden>
  • Prev by Date: Re: NSTableview datasource issues
  • Next by Date: Re: Releasing Objects
  • Previous by thread: Re: MallocDebug Hang with Core Data Save
  • Next by thread: Re: IPhone- Datasensitive bug from CoreData...
  • Index(es):
    • Date
    • Thread