的NSMutableSet不添加对象

问题描述:

我的代码不添加元素我的集合。的NSMutableSet不添加对象

我的头文件如下:

#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 

我.m文件:

@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; 
} 

日志输出:

[4187:FB03]测试substanceTextField值:欧米茄3-6-9 [4187:FB03] 确实发现与名称的结果是:欧米茄3-6-9和CLASS_NAME为:NHP [4187:FB03 ] NHP被发现将其添加到列表NHP [4187:FB03] NHP 计数加0 [4187后:FB03] NHP列表:0 DrugList:0的UserList:0

+0

尝试:'[self.NHPList ADDOBJECT:[子名称]];'也确保self.NHPList不是零。 – lnafziger 2012-03-17 21:39:44

+0

这并不工作 – user597608 2012-03-17 21:44:54

+0

你检查我的意见的第二部分? NHPList是否为零? (这是相同的疑问,@bandejapaisa是问) – lnafziger 2012-03-17 21:45:57

在某些时候你使用集之前,你需要创建一个新的NSMutableSet。

为了方便,你可以使用类似下面的自动分配一个新的可变集,当你问到使用它的第一次。

- (NSMutableSet *)NHPList { 
    if (NHPList == nil) { 
     NHPList = [[NSMutableSet alloc] init]; 
    } 
    return NHPList; 
} 

你也必须通过设置NHPListnil释放内存,通常在你的viewDidUnload方法。

如果这是您所设置的数据的唯一的地方,你也可以只改变这一行:

[NHPList addObject:[sub name]]; 

到:

if (self.NHPList == nil) { 
    self.NHPList = [[NSMutableSet alloc] init]; 
} 
[self.NHPList addObject:[sub name]]; 
+0

您需要为drugList和usersList做同样的事情。 – lnafziger 2012-03-17 22:30:46

你有初始化NHPList?

+0

我是新来的Objective-C,但是这不就是合成做什么?如果我必须自己初始化它,我该怎么做?我是否还需要手动释放内存? – user597608 2012-03-17 21:44:41

+1

不,合成为您创建了setter和getters(包含一些内存管理代码)。你正在使用ARC--当你创建和初始化时你的内存将被处理,而你不需要在dealloc中释放内存。有关用于创建NHPList变量的代码,请参阅@Inafziger答案。查看一些Apple示例代码并阅读Objective-C编程指南可能是个好主意。 – bandejapaisa 2012-03-17 22:17:39