선택한 월의 마지막 날을 구하기라는 것이 똑 떨어졌는데, 오분도 안되어서 너무 싱겁게 끝나버렸다.


해당 월의 캘린더 날짜의 범위(전체 일 수)를 구하면 마지막 날짜를 알 수 있다. 킁!!!



출처 - http://stackoverflow.com/questions/1731322/get-all-days-of-any-month-with-objective-c

참...이런 일도 생긴다.


참 귀찮은 일 중에 하나가 폰이나 태블릿 업데이트를 하면 거기에 맞게 XCode를 업데이트 해야 하는데...

XCode도 OS X의 업데이트까지 요구하니...

뭔가 업데이트를 하면 불편하기가 이만 저만이 아니다.


특히 프로젝트가 길어져서 오픈전까지 웬만하면 업데이트를 잘 안하는데, 이 놈의 디바이스가 바뀔 정도로 프로젝트가 길어지면 수가 없다.


아무튼 업데이트를 하고나서 인터페이스 빌더 파일에 언노운 클래스 이슈가 발생했는데, 

이게 타겟이 깨지거나 빌드 리소스에서 빠져있거나 하는 일들이 발생한다.


흠...귀찮음을 극복한다.



출처 - http://stackoverflow.com/questions/24924966/xcode-6-strange-bug-unknown-class-in-interface-builder-file

웨이브 테이블을 그려보고 싶어졌다.


음성 번역을 위해서 사용자의 음성 입력 시 입력된 음성에 따라서 웨이브 테이블 파동을 화면에 뿌려주는 기능.


입력된 음성의 크기에 따라서 다르게 파형의 크기를 조절하는 커스텀이 필요할 듯.


대충 검색해봤는데, 좀 더 자세하게 자료를 정리해봐야 할 것 같다.



출처 - http://stackoverflow.com/questions/5032775/drawing-waveform-with-avassetreader

음성 입력을 받아서 다른 언어의 음성으로 번역해주는 방법이 있는 지 찾아보았다.


러프하지만 되기는 할 듯...데모 한 번 만들어 봐야 겠다.


 - 네이버 기계번역은 SMT방식이고, 파파고는 NMT방식

 - 번역 프로세스: 음성입력 > 텍스트변환 > 번역 > 텍스트 입력 > 음성변환

 - 주요 메뉴

  1) 말하기: 사용자 음성 입력

   2-1) 원문: 입력된 텍스트

   2-2) 번역: 번역된 텍스트

  3) 들려주기: 번역된 텍스트를 음성 출력


음성인식 API(CLOVA): https://developers.naver.com/docs/labs/vrecog/

기계어번역 API: https://developers.naver.com/docs/labs/translator/

음성합성 API: https://developers.naver.com/docs/labs/tts/

App Transport Security 설정 부분이 추가되어서 보통 간단하게 Allow Arbitrary Loads 만 허용(YES) 형태로 사용하기도 하는데, 실제 보안을 위해서 허용하는 목록을 추가하려고 할 경우에는 도메인을 입력해야 한다.


테스트 서버의 경우 별도의 도메인이 없이 고정 IP로 되어 있어서 예외 목록에 넣어보았더니 적용이 안됀다.


일단 예외목록에는 도메인만 된다고 한다.


흠...


출처 - http://stackoverflow.com/questions/30903923/app-transport-security-and-ip-addresses-in-ios9


UITextField의 입력된 텍스트의 복사 및 붙여넣기를 막기 위해서 찾아본 글.


문제는 실제 클립보드 기능을 막는 효과가 있지만 키보드에서 단축키를 지원하면 복사 및 붙여넣기가 다시 가능해진다.


키보드에 해당 단축키 표시 부분을 막는 작업과 함께 해주어야 한다.


iOS 7이전과 이후 적용에 대하여 잘 설명되어 있다.



출처 - http://stackoverflow.com/questions/15745824/uitextfield-how-to-disable-the-paste/15746164#15746164



- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {

    

    BOOL isDisableCopyAndPaste;

    

    if ([[UIDevice currentDevice].systemVersion floatValue] < 7.0) { // iOS 6 이전

        if (action == @selector(paste:))

            return NO;

        if (action == @selector(select:))

            return NO;

        if (action == @selector(selectAll:))

            return NO;

        isDisableCopyAndPaste = [super canPerformAction:action withSender:sender];

    }

    else {    // iOS 7 이후

        [[NSOperationQueue mainQueue] addOperationWithBlock:^{

            [[UIMenuController sharedMenuController] setMenuVisible:NO animated:NO];

        }];

        isDisableCopyAndPaste = [super canPerformAction:action withSender:sender];

    }

    return isDisableCopyAndPaste;

} 


키보드 상단에 한 줄로 단축키 아이콘이 있는 부분이 있는데, 이게 텍스트 입력을 막아도 클립보드 붙여넣기 버튼을 눌러버리면 입력이 되어 버린다.


관련해서 해당 부분을 없애려고 찾아보니 이런 방법이 있다. 검색 바를 클릭하여 키보드가 나타날 때에도 유효하다고 한다.


출처: https://forums.developer.apple.com/thread/4664



  1. - (void)textFieldDidBeginEditing:(UITextField*)textField  
  2. {  
  3.     UITextInputAssistantItem* item = [textField inputAssistantItem];  
  4.     item.leadingBarButtonGroups = @[];  
  5.     item.trailingBarButtonGroups = @[];  
  6. }  


상태바를 숨기는 게 필요해서 검색해봄


Objective-Cd에서는 해당 뷰컨트롤러에서 다음의 메서드를 호출하여 YES로 적용한다.


- (BOOL)prefersStatusBarHidden NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED; // Defaults to NO


예)

- (BOOL)prefersStatusBarHidden {

    return YES;

}


Swift에서는 다음과 같이 적용한다.


override var prefersStatusBarHidden: Bool {

    get {

        return true

    }

}



앱을 만들다보면 아주 가끔이지만 텍스트 파일을 다뤄야 할 때가 있다.




1. 파일 생성 및 저장


다음은 Documents Directory에 파일을 저장하는 방법이다.


// 경로 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"test.txt"];


// 컨텐츠

    NSString *content = @"테스트로 저장해요.";

    NSError *err = NULL;

    

 // 파일 저장

    [content writeToFile:filePath

              atomically:NO

                encoding:NSUTF8StringEncoding

                   error:&err];





2. 파일 읽기


파일을 읽을 때에는 이렇게 읽는다.


// 경로 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"test.txt"];


// 컨텐츠 읽기 

    NSString *content = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error: NULL];





3. 파일명 변경


파일명을 변경하려면 다음과 같이 변경할 수 있다.



// 경로 

    NSFileManager *fileManager = [NSFileManager defaultManager];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *documentsDirectory = [paths objectAtIndex:0];


// 해당 파일 경로

    NSString *oldPath = [documentsDirectory stringByAppendingPathComponent:@"test.txt"];

    NSString *newPath = [documentsDirectory stringByAppendingPathComponent:@"renamed.txt"];

    

// 파일명 변경

 NSError *err = NULL;

    [fileManager moveItemAtPath:oldPath toPath:newPath error:&err];




4. 파일 삭제

특정 파일을 지울 때는 다음과 같이 경로를 지정하여 삭제할 수 있다.

// 경로 

    NSFileManager *fileManager = [NSFileManager defaultManager];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *documentsDirectory = [paths objectAtIndex:0];


// 파일 삭제

[fileManager removeItemAtPath:[documentsDirectory stringByAppendingPathComponent:@"renamed.txt"] error:NULL];





네트워크 통신하다 보면 서버 시스템이 UTF-8로 데이터를 넘기지 않는 경우가 있다.


서버에서 EUC-KR로 데이터를 넘겨주면 이를 그냥 NSString으로 넘기면 글씨가 깨지기 마련이다.


다음과 같이 인코딩을 지정하여 const char 로 변환 후 NSString으로 데이터를 생성하면 정상적으로 텍스트를 읽을 수 있다.



NSUInteger encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingEUC_KR);

const char * eucKRString = [original cStringUsingEncoding:encoding];

NSString *encodedString = [NSString stringWithUTF8String:eucKRString];



혹은 다음과 같이 사용해도 된다. 

NSUInteger encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingEUC_KR);

NSString * encodedString = [NSString stringWithCString:[data bytes] encoding:encoding];



출처 - http://stackoverflow.com/questions/13883638/how-to-encode-nsstring-to-euc-kr

+ Recent posts