My code isn’t adding elements to my sets.
My header file is as follows:
#import <UIKit/UIKit.h>
@interface NHPSearchViewController : UITableViewController
//For using the local DB
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
//texst field where user enters a substance name or a drug name
@property (weak, nonatomic) IBOutlet UITextField *substanceTextField;
//An array for Drug Names, and another array for NHPs
@property (strong, nonatomic) NSMutableSet *drugList;
@property (strong, nonatomic) NSMutableSet *NHPList;
//Contains both drugList and NHP list as one array for the data to be shown for the user.
@property (strong, nonatomic) NSMutableSet *usersList;
@end
My .m file:
@interface NHPSearchViewController ()
- (BOOL) checkAndAddToList: (NSString *) substance;
@end
@implementation NHPSearchViewController
@synthesize managedObjectContext;
@synthesize substanceTextField;
@synthesize drugList, NHPList, usersList;
//"Private" helper methods
-(BOOL) checkAndAddToList:(NSString *)substance{
// Set up a predicate for testing if the data exists in the table
NSPredicate *pred = [NSPredicate predicateWithFormat:@"name == %@", substance];
//Run the query to see if the substance is in the Substances Table.
NSMutableArray *results =[NSMutableArray array];
results = [CoreDataHelper searchObjectsForEntity:@"Substances" withPredicate:pred andSortKey:nil andSortAscending:NO andContext:self.managedObjectContext];
if ([results count] > 0){
//Found the substance return YES
Substances *sub = [results objectAtIndex:0];
NSLog(@"Did find a result with name:%@ and class_name as:%@ ",[sub name], [sub class_name]);
//add the name to the appropriate lists.
if([[sub class_name] isEqualToString:@"NHP"]){
NSLog(@"NHP was found adding it to the nhp list");
[NHPList addObject:[sub name]]; //THIS is not working
NSLog(@"NHP count after adding %i", [NHPList count]);
}else if ([[sub class_name] isEqualToString:@"Drugs"]){
NSLog(@"Drug was found adding it to the drug list");
[drugList addObject:[sub name]]; //THIS is also not working
}
//add the name to our list in the view
[usersList addObject:[sub name]]; //This is also not working
return YES;
}else{
//
return YES;
}
return NO;
}
The log output:
[4187:fb03] Testing substanceTextField value: Omega 3-6-9 [4187:fb03]
Did find a result with name:Omega 3-6-9 and class_name as:NHP
[4187:fb03] NHP was found adding it to the nhp list [4187:fb03] NHP
count after adding 0 [4187:fb03] NHP List:0 DrugList:0 UserList:0
At some point before you use the set, you need to create a new NSMutableSet.
To make it easy, you can use something like the following to automatically allocate a new mutable set when you ask to use it for the first time.
You would also have to release the memory, usually in your
viewDidUnloadmethod by settingNHPListtonil.If this is the only place that you set the data, you could also just change this line:
to: