Programming/iOS - ObjC
RangeOfString 주의할 점
Tez.Park
2014. 7. 23. 12:14
NSString에서 rangeOfStrting을 사용할 때 nil argument 관련 크래쉬가 발생할 때가 있다.
아래 상황을 살펴보자.
- (void)test {
NSString* baseStr = @"test";
NSString* rangeStr = nil;
NSRange range = [baseStr rangeOfString:rangeStr];
NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:baseStr];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:range];
}
위와 같이 rangeOfString 에 nil 값을 가진 변수가 사용되면 아래와 같은 크래시가 발생한다.
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSCFConstantString rangeOfString:options:range:locale:]: nil argument' |
따라서 rangeOfString 함수를 사용할 경우에는 nil 값을 가진 변수를 사용하지 않도록 주의가 필요하며, 변수에 들어오는 값을 알 수 없는 경우에는 아래와 같은 예외처리로 크래시를 막을 수 있다.
- (void)test {
NSString* baseStr = @"test";
NSString* rangeStr = nil;
if ([rangeStr length]) { // string 이 있을때 플로우를 타도록 예외처리 추가
NSRange range = [baseStr rangeOfString:rangeStr];
NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:baseStr];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:range];
}
}
반응형