2013-03-29 2 views
1

나는 건너 뛰는 내 배열에 몇 객체 (2-10)를 추가 할 방법이 필요 NILS 있습니다 이들 :NSMutableArray에 nil 객체를 건너 뛰는 객체를 추가하는 방법은 무엇입니까?

NSMutableArray *arr = [[NSMutableArray alloc] init]; 
[arr addObjectsSkipNils:obj1, obj2, obj3]; 

나는 우아한 방법으로이 방법을 쓸 수 있습니까?

+0

어레이 객체에 nil 또는 [NSNull Null]이 포함되어 있습니까? –

+0

각 개체는 nil이거나 실제 개체입니다. 저는 3 문장을 쓰고 싶지 않습니다. 1 문장으로 끝낼 수 있습니까? –

+0

그런 식으로, 심지어는 특히 nil이 아닌 값으로는 수행 할 수 없습니다. 목록의 마지막 값은 항상 nil이어야합니다. –

답변

3

이 분류 방법은 작동합니다 :

@interface NSMutableArray (MyAdditions) 
- (void)addObjectsSkipNilsWithCount:(NSUInteger)count objects:(id)obj, ...; 
@end 

@implementation NSMutableArray (MyAdditions) 

- (void)addObjectsSkipNilsWithCount:(NSUInteger)count objects:(id)obj, ... 
{ 
    va_list ap; 
    va_start(ap, obj); 
    // First object: 
    if (obj != nil) 
     [self addObject:obj]; 
    // Remaining objects: 
    for (NSUInteger i = 1; i < count; i++) { 
     id myobj = va_arg(ap, id); 
     if (myobj != nil) 
      [self addObject:myobj]; 
    } 
    va_end(ap); 
} 
@end 

예 :

NSMutableArray *a = [NSMutableArray array]; 
[a addObjectsSkipNilsWithCount:3 objects:@"foo", nil, @"bar"]; 
NSLog(@"%@", a); 
// Output: (foo, bar) 

당신은 nil 변수 인수 목록 터미네이터로 사용할 수 없기 때문에, 명시 적으로 개체 수를 지정해야합니다. (카운트가 제공된 실제 객체 수보다 많으면 나쁜 일이 발생할 수 있습니다.)

0

당신은 사용할 수 있습니다

[yourMainArray removeObjectIdenticalTo:[NSNull null]]; 

을 이제 당신은 당신이 아주 쉽게 할 수 arr이를 복사 할 경우.

+0

처음부터 nil 값은 배열에 어떻게 도달 했습니까? –

+0

예, 이것은 닭고기 및 달걀 문제입니다. –

관련 문제