레이블이 iOS인 게시물을 표시합니다. 모든 게시물 표시
레이블이 iOS인 게시물을 표시합니다. 모든 게시물 표시

2019년 11월 12일 화요일

Objective-C NSMutableDictionary 활용법

오늘 포스팅 할 내용은 Objective-C 에서 주로 쓰이는 NSMutableDictionary 활용법에 대한 강좌 입니다.

NSMutableDictionary key/value 성 데이터를 관리의 목적으로 만들어진 Class 중 하나 입니다.

​NSMutableDictionary *variable = [[NSMutableDictionary alloc] init]; 과 같이 선언 하여 씁니다.

​간단히 문자열 "A" ~ "Z" 까지 실제 ASCII 코드값을 매칭 하는 샘플을 만들어 보겠습니다.


NSMutableDictionary *mapAlphaASCII = [[NSMutableDictionary alloc] init];
    
//값 할당.
for (NSInteger i = 65; i <= 90; i++)
{
    NSString *sKey;
    sKey = [NSString stringWithFormat:@"%c", (int)i];
    
    [mapAlphaASCII setValue:[NSNumber numberWithInteger:i] forKey:sKey];
}

//Key를 이용한 접근.
for (NSString *sKey in mapAlphaASCII)
{
    NSLog(@"Key[%@]=Value[%@]", sKey, [mapAlphaASCII objectForKey:sKey]);
}

//Enumerator 를 이용한 접근.
NSEnumerator *enmutor = [mapAlphaASCII objectEnumerator];
id oValue;
while (oValue = [enmutor nextObject])
{
    NSLog(@"Value[%@]", oValue);
}
< 위 코드는 XCode 11.2 Objective-C 에서 빌드 되었습니다 >

코드에서 염두하실것은 NSMutableDictionary 는 NSObject 를 상속받은 객체만을 멤버로 가질수 있습니다.

​일반적인 타입의 경우 멤버로 추가될수 없기 때문에 NSInteger 의 경우도 NSNumber 객체로 변환하여 멤버로 추가 되었습니다.

멤버를 접근 하는 방법은 Key 고속접근/Enumerator 를 이용하는 방법으로 구현 하였습니다.

NSMutableDictionary 관련 상세한 인터페이스는 https://developer.apple.com/documentation/foundation/nsmutabledictionary?language=objc 여기서 확인 하실수 있습니다.

​​제가 여기서 추가로 설명하고자 하는것은 제가 자주 사용하던 패턴과 사용함에 있어 필요로 생각하는 요소들만 정리해서 안내 해드리겠습니다.

a. setValue : NSMutableDictionary 에 멤버를 추가 해주는 메소드 입니다.
b. count : NSMutableDictionary 에 저장된 멤버에 대한 갯수를 리턴해주는 메소드 입니다.
c. removeAllObjects : NSMutableDictionary 에 저장된 멤버를 모두 지우는 메소드 입니다.
d. removeObjectForKey : NSMutableDictionary 에 저장된 멤버중 하나를 지우는 메소드 입니다.
e. objectForKey : 특정 키에 해당하는 값을 리턴합니다.

위 설명된 항목들을 활용한 샘플 코드를 만들어 보겠습니다.


NSMutableDictionary *mapAlphaASCII = [[NSMutableDictionary alloc] init];
    
//값 할당.
for (NSInteger i = 65; i <= 90; i++)
{
    NSString *sKey;
    sKey = [NSString stringWithFormat:@"%c", (int)i];
    
    [mapAlphaASCII setValue:[NSNumber numberWithInteger:i] forKey:sKey];
}

NSLog(@"mapAlphaASCII Member Count %ld", [mapAlphaASCII count]);

//Key를 이용한 접근.
for (NSString *sKey in mapAlphaASCII)
{
    NSLog(@"Key[%@]=Value[%@]", sKey, [mapAlphaASCII objectForKey:sKey]);
}

// B 값을 찾아 삭제.
if([mapAlphaASCII objectForKey:@"B"] != nil)
{
    [mapAlphaASCII removeObjectForKey:@"B"];
}
else
    NSLog(@"Not Found B");

NSLog(@"mapAlphaASCII Member Count %ld", [mapAlphaASCII count]);

//전체 멤버 삭제.
[mapAlphaASCII removeAllObjects];

NSLog(@"mapAlphaASCII Member Count %ld", [mapAlphaASCII count]);
NSMutableDictionary 의 기능은 제가 링크를 걸은 곳에서 더 많은 기능을 확인 하실수 있습니다.

2019년 11월 7일 목요일

Objective-C NSMutableArray 활용법

오늘 포스팅 할 내용은 Objective-C 에서 주로 쓰이는 NSMutalbeArray 활용법에 대한 강좌 입니다.

NSMutableArray 는 가변 리스트 배열을 관리 하는 클래스 입니다.

NSArray 는 멤버가 초기에 고정되어 있기 때문에 추가와 삭제를 자유롭게 하려면 NSMutableArray 를 사용 하셔야 합니다.
​
ARC 를 사용하는 환경에서
NSMutableArray* variable = [[NSMutableArray alloc] init]; 과 같이 선언 하여 씁니다.
​
간단히 1부터 100까지 변수를 추가하여 값을 출력하는 코드를 만들면서 멤버를 접근 하는 방법은 operator / objectAtIndex 을 이용하는 방법을 샘플에 적용하여 만들어 보겠습니다.

NSMutableArray* arrTest = [[NSMutableArray alloc] init];
    
for (NSInteger i=0; i<100; i++)
{
    [arrTest addObject:[NSNumber numberWithInteger:i]];
}

//operator 접근.
for (NSInteger i=0; i<[arrTest count]; i++)
{
    NSLog(@"operator arrTest[%ld]=[%@]", i, arrTest[i]);
}

//objectAtIndex 지시자 접근.
for (NSInteger i=0; i<[arrTest count]; i++)
{
    NSLog(@"objectAtIndex arrTest[%ld]=[%@]", i, [arrTest objectAtIndex:i]);
}

< 위 코드는 XCode 11.2 Objective-C 에서 빌드 되었습니다 >

코드에서 염두하실것은 NSMutableArray 는 NSObject 를 상속받은 객체만을 멤버로 가질수 있습니다.
일반적인 타입의 경우 멤버로 추가될수 없기 때문에 NSInteger 의 경우도 NSNumber 객체로 변환하여 멤버로 추가 되었습니다.

​NSMutableArray 관련 상세한 인터페이스는 https://developer.apple.com/documentation/foundation/nsmutablearray?language=objc 여기서 확인 하실수 있습니다.

제가 여기서 추가로 설명하고자 하는것은 제가 자주 사용하던 패턴과 사용함에 있어 필요로 생각하는 요소들만 정리해서 안내 해드리겠습니다.
​
​a. addObject : ​NSMutableArray 에 순차적으로 멤버를 추가 해주는 메소드 입니다. 위 샘플에서도 확인 하실수 있듯이 멤버에 대한 순차적 추가로 쓰실수 있습니다.
b. count : ​NSMutableArray 에 저장된 멤버에 대한 갯수를 리턴해주는 메소드 입니다.
c. removeAllObjects : ​NSMutableArray 에 저장된 멤버를 모두 지우는 메소드 입니다.
d. removeObjectAtIndex : ​NSMutableArray 에 저장된 멤버중 하나 지우는 메소드 입니다.
e. insertObject : ​NSMutableArray 에 멤버를 추가 할때 순서가 아닌 특정 위치에 추가 할수 있는 메소드 입니다.
f. objectAtIndex : index 를 이용하여 위치에 해당하는 멤버를 리턴합니다.
g. setObject : index 를 이용하여 위치에 해당하는 멤버를 변경합니다.
h. removeObject:inRange : 주어진 범위의 멤버를 삭제 합니다.

위 설명된 항목들을 활용한 샘플 코드를 만들어 보겠습니다.


NSMutableArray* arrTest = [[NSMutableArray alloc] init];
    
for (NSInteger i=0; i<100; i++)
{
    [arrTest addObject:[NSNumber numberWithInteger:i]];
}

//추가된 멤버의 갯수 출력.
NSLog(@"arrTest Count : %ld", [arrTest count]);

//20번쨰 위치에 200 엠버 추가.
[arrTest insertObject:[NSNumber numberWithInt:200] atIndex:20];
NSLog(@"arrTest Count : %ld, arrTest[20]=%@", [arrTest count], [arrTest objectAtIndex:20]);

//20번째 삽입한 200 멤버 제거.
[arrTest removeObjectAtIndex:20];

NSLog(@"arrTest Count : %ld, arrTest[20]=%@", [arrTest count], [arrTest objectAtIndex:20]);
    
//50 ~ 100 멤버 삭제.
[arrTest removeObjectsInRange:(NSRange){50, 50}];

NSLog(@"arrTest Count : %ld", [arrTest count]);
for (NSInteger i=0; i<[arrTest count]; i++)
{
    NSLog(@"arrTest[%ld]=[%@]", i, arrTest[i]);
}

//전체 멤버 삭제.
[arrTest removeAllObjects];

NSLog(@"arrTest Count : %ld", [arrTest count]);

NSMutableArray 의 기능은 제가 링크를 걸은 곳에서 더 많은 기능을 확인 하실수 있습니다.

구간 삭제는 50번째 부터 50개를 지운다는 의미 입니다.

2019년 9월 17일 화요일

iOS 13 WIFI SSID 구하기.

iOS Beta 가 조만간 정식 버젼으로 풀릴날도 얼마 남지 않았네요.
​

오늘은 기존에는 아무런 제약 없이 연결된 WIFI SSID를 구할수 있었는데 베타에서 얻을수 있는 방법에 대해서 알아 보겠습니다.
​
일단 XCode 11 Beta 와 iOS 13 Beta 가 설치 되어있어야 겠죠 ^^

샘플로 만들어진 프로젝트에 설정에

Capability 에
 Access WiFi Information 을 ON 해둡니다.
​
그리고 아래 함수 또는 기존에 만들어서 운영하던 함수도 상관 없어요.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
- (NSString*) updateWIFI
{
    NSString* strWifiSSID = @"";
 
    NSArray * ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
    for (NSString* item in ifs)
    {
        NSLog(@"item = %@", item);
        NSDictionary * info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((CFStringRef)item);
        if (info == nil) continue;
        strWifiSSID = [info objectForKey:(NSString*)kCNNetworkInfoKeySSID];
        break;
    }
    
    return strWifiSSID;
}

위 함수를 호출하여 리턴되는 값을 출력 하시면 연결된 WIFI SSID를 얻으실수 있을겁니다.
그럼.. ^^

2019년 9월 3일 화요일

iOS 13 Beta Dark Mode 색상 작업.

iOS 13 Beta 가 현재 진행중이며 조만간 정식 릴리즈를 배포할 예정입니다.

iOS 13 Beta 에 들어오는 다크 모드는 많은 사람들이 좋아 하기도 하고 별로 감흥이 없으신 분도 있을테죠.

오늘은 그거에 관련된 컬러 개발 이슈에 대해 이야기 할까 합니다.

예를 들어 라벨을 컨트롤을 만들어 UI에 붙여서 작업을 한다고 하면 기존 방식 대로라면

라벨 컨트롤 생성하고 텍스트를 지정하고 폰트를 지정하여 진행을 할겁니다.

​

만약에 이 라벨에 바탕을 하얀색을 지정하여 작업을 한다면 일반적인 모드(다크모드가 아닌)에서는 아무런 이슈가 없을겁니다.

​

하지만 다크 모드로 가게 되면 글자 색상의 반전이 일어나게 됩니다.

배경색이 하얀색으로 지정을 하였기 때문에 글자 또한 하얀색으로 반전이 되어 글자가 안보이게 되는거지요.

​

이를 위해서는 라벨 코딩을 하실때 기본적인 글자 색상을 디폴트에 맡기면 안되고 색상 지정을 블랙으로 지정을 해주셔야 다크모드로 가도 색상 반전이 일어나서 원하지 않는 UI가 발생하지 않게 됩니다.

​

많은 분들이 베타로 덜 고생 하시길 기원 하면서 ^^