ios - Adding an NSManagedObject to an NSMutableArray via didSelectRowAtIndexPath -


i have core data project set up, i've got nsfetchedresultscontroller working properly, nspredicates works properly, , i'm onto doing useful data displayed on screen.

right now, have uitableviewcellaccessory working toggle checked/unchecked cells, i'm returning nil when try add selectedmanagedobject myarrayofmanagedobjects via didselectrowatindexpath.

what proper way add/remove nsmanagedobject nsmutablearray via didselectrowatindexpath?

here relevant properties:

@property (nonatomic, strong) nsmanagedobject *selectedmanagedobject; @property (nonatomic, strong) nsmutablearray *myarrayofmanagedobjects; 

here's viewdidload array want dump `nsmanagedobject's instantiated:

- (void)viewdidload {     [super viewdidload];      // standard core data setup stuff      // instantiate list store myarrayofmanagedobjects     self.myarrayofmanagedobjects = [[nsmutablearray alloc]init]; } 

here's didselectrowatindexpath

    -(void)tableview:(uitableview *)tableview didselectrowatindexpath:(nsindexpath *)indexpath {          nsmanagedobject *selectedmanagedobject = self.selectedmanagedobject;          // set checkmark accessory selected row.         // todo: add object array         if ([tableview cellforrowatindexpath:indexpath].accessorytype == uitableviewcellaccessorynone) {             [[tableview cellforrowatindexpath:indexpath] setaccessorytype:uitableviewcellaccessorycheckmark];             // ** problem lives here             [self.myarrayofmanagedobjects insertobject:self.selectedmanagedobject atindex:indexpath.row];             nslog(@"added %@ myarrayofmanagedobjectsarray", selectedmanagedobject.myobjectdescription);             nslog(@"myarrayofmanagedobjects contains %@", self.myarrayofmanagedobjects);             [tableview deselectrowatindexpath:indexpath animated:yes];         } else {             [[tableview cellforrowatindexpath:indexpath] setaccessorytype:uitableviewcellaccessorynone];             // ** problem lives here             [self.myarrayofmanagedobjects removeobjectatindex:indexpath.row];             nslog(@"removed %@ myarrayofmanagedobjectsarray", selectedmanagedobject.myobjectdescription);             nslog(@"myarrayofmanagedobjects contains %@", self.myarrayofmanagedobjects);             [tableview deselectrowatindexpath:indexpath animated:yes];         }     } 

update: problem solved

in case wasn't clear, stuff on tableview fetchedresultscontroller. task add items separate nsmutablearray i'm going save. here's got working:

-(void)tableview:(uitableview *)tableview didselectrowatindexpath:(nsindexpath *)indexpath {      // ** problem solved: needed tell compiler selectedmanagedobject     self.selectedmanagedobject = [self.fetchedresultscontroller objectatindexpath:indexpath];      // set checkmark accessory selected row.     if ([tableview cellforrowatindexpath:indexpath].accessorytype == uitableviewcellaccessorynone) {         [[tableview cellforrowatindexpath:indexpath] setaccessorytype:uitableviewcellaccessorycheckmark];         [self.myarrayofmanagedobjects addobject:self.selectedmanagedobject];         nslog(@"added **%@** myarrayofmanagedobjects", self.selectedmanagedobject.description);         nslog(@"myarrayofmanagedobjects contains %lu objects", (unsigned long)[self.myarrayofmanagedobjects count]);         [tableview deselectrowatindexpath:indexpath animated:yes];     } else {         [[tableview cellforrowatindexpath:indexpath] setaccessorytype:uitableviewcellaccessorynone];         [self.myarrayofmanagedobjects removeobject:self.selectedmanagedobject];         nslog(@"removed **%@** mymanagedobjectarray", self.selectedmanagedobject.description);         nslog(@"myarrayofmanagedobjects contains %lu objects", (unsigned long)[self.myarrayofmanagedobjects count]);         [tableview deselectrowatindexpath:indexpath animated:yes];     } } 

i think there wrong logic put in place. or maybe don't understand it.

you have array containing objects displayed, right? self.myarrayofmanagedobjects. assume you're filling somewhere else, otherwise wouldn't asking question.

then select , :

nsmanagedobject *selectedmanagedobject = self.selectedmanagedobject; 

means (as know) newly instantiated nsmanagedobject same 1 .h, is, can see, not instantiated.

so you're pretty playing nil every line following one.

what should :

nsmanagedobject *selectedmanagedobject = [self.myarrayofmanagedobjects objectatindex:indexpath.row]; 

or

self.selectedmanagedobject = [self.myarrayofmanagedobjects objectatindex:indexpath.row]; 

now have reference right object in array of objects , can start manipulating it.

from can see add or remove object array, add or remove reference new array.

[myarray addobject:object]; [myarray removeobject:object]; 

since they're references, they'll find it.

if you're modifying data of same array built tableview, have call

[self.tableview reloaddata]; 

to see newly updated tableview


Comments

Popular posts from this blog

php - failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request -

java - How to filter a backspace keyboard input -

java - Show Soft Keyboard when EditText Appears -