Commonlife's Blog

My daily life

Archive for 10월 2012

iOS : NSAssert

leave a comment »

자바에서 본다면 try / catch 역할이다. 하지만 다른 점은 특별한 예외처리가 없으면 멈추거나 앱이 종료된다.

사용방식은 NSAssert(조건, 실행);

ex)

int index = 5;

NSAssert(index == 5, @”Stop”);

NSLog(@”Next Step”);

이럴 경우 Next Step 만 찍힌다.

index = 6 일 경우 조건이 false가 되고 Stop이 찍히고 Next Step은 찍히지 않는다.

*** Terminating app due to uncaught exception ‘NSInternalInconsistencyException’, reason: ‘Stop’

라고 로그가 뜨고 앱은 멈춘다.

예외처리는 NSAssertionHandler를 통해처리한다.

Written by tocommonlife

2012/10/30 at 03:18

iOS에 게시됨

Tagged with

iOS : iOS6 연락처에서 정보 가져오기

leave a comment »

기존의 앱을 유지 보수 하던 도중 연락처에서 전화번호를 못가져오는 사태가 발생되고 있었다.

찾아보니 문제는 iOS6의 개인 보안 정책 때문이었다.

ABAddressBookRef addressBook;
float thisVersion = [[[UIDevicecurrentDevice] systemVersion] floatValue];

if(thisVersion >= 6.0){
    addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
    __block BOOL accessGranted = NO;
    dispatch_semaphore_t sema = dispatch_semaphore_create(0);
    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error){
        accessGranted = granted;
        dispatch_semaphore_signal(sema);
    });
    dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
    dispatch_release(seam);
} else {
    addressBook = ABAddressBookCreate();
}
  •  __block은 메모리 할당을 stack이 아닌 heap에서 한다.

Written by tocommonlife

2012/10/09 at 01:19

iOS에 게시됨

Tagged with , ,