views:

24

answers:

1

Ok, lemme start out by saying Im new to this! LOL I have done my due diligence of studying the topics (4 books and numerous videos to date) and searching for hours on end, and still havent found an answer.

I feel like I have a solid understanding of Core Data, or at least the back end DB side of it. I have my app built and I have my model built. My app has a Tabbar controller as well as a navigation controller for each separate tab.

My app will have an item table view which populates the name of those items from Core Data. Upon selecting the item, the navController pops to a detail view which loads the rest of the data for that item.

When a user clicks + to add an item, I need to pop to another View Controller with fields to add the name and details (which it does). However, I cant seem to get these details to save. I think I need to cast the user inputs as an NSSet, then bring that NSSet into the persistent store, but the method declaration for this is eluding me! Currently, my code looks like so...

- (IBAction) save:(id)sender {
 NSLog(@"Save pressed");

 if (itemName != nil) {

  [itemName removeObject:itemName];
  self.item = nil;  //This will release our reference also
 }
 //Create a new item set for the new values
 NSSet* newItem = [[NSSet alloc] initWithSet:newItem];

 [self didChangeValueForKey:@"itemName"];
 [self didChangeValueForKey:@"detailItem1"];
 [self didChangeValueForKey:@"detailItem2"];

 //Add it to the master item array and release our reference
 [itemArray addObject:newItem];
 [newItem release];

 //Sort the array since the name might have changed with an existing item or a new one
 NSSortDescriptor *nameSorter = [[NSSortDescriptor alloc] initWithKey:@"itemName" ascending:YES selector:nil];

 [itemArray sortUsingDescriptors:[NSArray arrayWithObject:nameSorter]];
 NSLog(@"Array sorter");
 [nameSorter release];

 //then pop the detailed view controller

 [self dismissModalViewControllerAnimated:YES];
}

All of the documentation I have found on Core Data points more in the direction of populating an already existing database, not accepting user inputs. So if I am WAY off in my approach and the answer is more than just a simple one, please point me in the right direction!!

Also, Ive added items to my Core Data store that successfully persist. However, an sqlite DB hasn't been created in my app, which I thought happened automatically. So I may have more problems than I thought!

So far I have found this site to be a tremendous help, even though my reputation doesnt allow me to rate answers!

Anyway, thanks in advance for the help.

+1  A: 

In most Core Data implementations, you don't deal with sets directly unless you are simultaneously adding multiple managed objects to a relationship. I'm not really sure what you are trying to do here.

In the code shown, you don't do anything related to Core Data. You do not have a context and you do not insert into the context a new managed object that you can populate with your new data. In fact, you don't seem to have any managed objects at all.

I suggest you look at the Navigation based project template in Xcode. It shows how to set up the Core Data stack and how to add and remove objects displayed in a tableview.

TechZen
TechZenUsually the simplest answer is the right one, right?! You pointed out the obvious but I didnt pick it up. I have the core data template and it's methods are populated by my tableViewController, which is where I have my main items loaded. Now that you mentioned not seeing any core data, it makes sense that nothing is showing up for me in the detail and add views since Im not bringing ANY of the core data methods over to those implementation files.I told you I was new! LOLI appreciate the answer, at least it gives me something to go on.
iMerlin