2014-07-22 2 views
0

술어를 사용하여 배열을 필터링하고 싶지만 데이터 유형을 올바르게 처리하면 구부러져 있습니다.NSPredicate로 필터링 - 데이터 유형?

먼저 오프 난으로 필터링 할 목록을 가지고 HospitalObjects을 (그것은 NSMutableArray를 정의있어 * 둘째

NSMutableArray *HospitalIDs = [[NSMutableArray alloc]init]; 
[HospitalIDs addObject: @"1"]; // Must be "id", int & NSInteger not accepted by XCode 
[HospitalIDs addObject: @"2"]; // Must be "id", int & NSInteger not accepted by XCode 
[HospitalIDs addObject: @"3"]; // Must be "id", int & NSInteger not accepted by XCode 

를, I는 I 위의 배열을 사용하여 필터링 할 개체의 목록을 가지고 병원 개체가 미리 채워져 있습니다.

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.HospitalID IN %@", HospitalIDs]; 
[HospitalObjects filterUsingPredicate:predicate]; 

NSLog(@"%i",[HospitalObjects count]); 

//The expected result is 3, but it prints 0. 

왜 WHY?

첫 번째 배열은 NSString 값을 포함하지만 내 HospitalObject.HospitalID는 int 유형이므로

내 개체 정의에서 HospitalID의 데이터 형식을 NSString으로 변경하고 싶지 않지만 정수 값을 필터링 할 수 없습니다. 어떻게해야합니까?

데이터 형식을 술어 구문 WITHIN으로 변환 할 수 있습니까? 방법?

답변

0

우선 NSArray에 숫자를 저장하는 가장 좋은 방법은 NSNumber 개체를 사용하는 것입니다. 더 이상의 변경없이

[HospitalIDs addObject: @(1)]; 
[HospitalIDs addObject: @(2)]; 
[HospitalIDs addObject: @(3)]; 

이 그런 다음 술어가 작동합니다 : 당신은 단순히 NSIntegerObjective-C literal syntax를 사용하여 NSNumber에 변환 할 수 있습니다.

0

개체에 ints, floats, bool, ..을 래핑하는 Type NSNumber이 있습니다. 그런데

NSMutableArray * hospitalIDs = [[NSMutableArray alloc] init]; 
[hospitalIDs addObject: @1]; // You can wrap an normal int into an NSNumber jusing @. In some siztuations you have to use @(yourOrdinaryValueTypeVariable) 
[hospitalIDs addObject: @2]; 
[hospitalIDs addObject: @3]; 

CamelCase를 사용하여 적절한 이름을 사용하려고하면

  • 클래스가 대문자로 시작 : SomeClassName
  • 하부 케이스와 개체 변수 및 메소드 이름 : 'SomeClassName * 여기서 someObject;
  • 상수는 모두 대문자입니다. MY_CONSTANT
관련 문제