2012-03-17 7 views
1

내 코드가 세트에 요소를 추가하지 않습니다.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] 이름이 Omega 3-6-9이고 class_name이 다음과 같은 결과를 찾았습니까? NHP [4187 : fb03 FB03] NHP 목록 : 0 [4187을 추가 한 후 FB03] NHP 수 : NHP는 NHP 목록에 추가 [4187 발견되었다] 0 DrugList : 0 UserList에 : 0

+0

시도 :'[self.NHPList addObject : 이것은 당신이 데이터를 설정할 수있는 유일한 장소 인 경우

, 당신은 또한 단지이 줄을 바꿀 수 [하위 이름]];'또한 self.NHPList가 0이 아닌지 확인하십시오. – lnafziger

+0

그게 작동하지 않았다 – user597608

+0

내 의견의 두 번째 부분을 확인 했습니까? NHplist는 무효입니까? (이것은 @bandejapaisa가 요구하는 것과 같은 질문입니다.) – lnafziger

답변

7

설정을 사용하기 전에 새로운 NSMutableSet을 만들어야합니다.

쉽게 만들려면 다음과 같은 것을 사용하여 처음 변경할 때마다 새로운 변경 가능 세트를 자동으로 할당하십시오.

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

또한 nilNHPList을 설정하여 일반적으로 viewDidUnload 방법, 메모리를 해제해야합니다.

[NHPList addObject:[sub name]]; 

에 :

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

drugList 및 usersList에 대해 동일한 작업을 수행해야합니다. – lnafziger

1

당신이 NHPList를 초기화 있나요?

+0

Objective-C를 처음 접했지만 합성이하는 것이 아닙니까? 내가 직접 초기화해야한다면 어떻게해야할까요? 수동으로 메모리를 해제해야합니까? – user597608

+1

아니요, synthesize는 메모리 관리를위한 코드가 포함 된 setter 및 getter를 만듭니다. ARC를 사용하고 있습니까? 생성 및 초기화 할 때 메모리가 처리되어 dealloc에서 메모리를 해제 할 필요가 없습니다. NHPList 변수를 만드는 데 사용 된 코드에 대한 @Inafziger 응답을 참조하십시오. 아마도 Apple 예제 코드를보고 Objective-C 프로그래밍 가이드를 읽는 것이 좋습니다. – bandejapaisa

관련 문제