본문 바로가기

Mac&iOS

NSMenu와 NSMenuItem 메뉴를 추가하기 위해 아래와 같이 추가하였다. NSMenuItem *fileMenuItem = [[NSMenuItem alloc] initWithTitle:@"New Project" action:@selector(menu_newProject) keyEquivalent:@""];[self.menuNew.submenu addItem:fileMenuItem]; 추가한 New Project 비활성화 상태다. 기본값이 비활성화인가. 강제로 Enable을 시켜봤다. NSMenuItem *fileMenuItem = [[NSMenuItem alloc] initWithTitle:@"New Project" action:@selector(menu_newProject) keyEquivalent:@""];[fileMenuIte.. 더보기
noteNewRecentDocumentURL is not working 처음 프로젝트를 만들 때 document base로 만들지 않은 상태에서 파일 저장 히스토리를 관리해야할 일이 생겼다. 찾아보니 [[NSDocumentController sharedDocumentController]noteNewRecentDocumentURL:testUrl]; 와 같은 형식으로 쓰면 가능했다. 우선 테스트 코드를 작성해 봤다. NSString* testPath = @"/Users/zamcom/Documents/test.txt"; NSURL* testUrl = [NSURL URLWithString:testPath];[[NSDocumentController sharedDocumentController]noteNewRecentDocumentURL:testUrl]; NSDocumentContro.. 더보기
런타임때 레티나 디스플레이 체크 우선 프로젝트에 해상도별로 imageName.png와 imageName@2x.png 를 넣어 둔다.이렇게 하면 [NSImage imageNamed:@"imageName"]; 를 이용하면 알아서 모니터 해상도에 맞게 이미지를 가져오게 된다.하지만 프로젝트에 포함되지 않은 이미지의 경우는 이렇게 할 수 없다. 할 수 없이 현재 디스플레이가 레티나인지 여부를 런타임때 확인하여 imageName 에 @2x 를 붙여 넣는 소스를 작성하였다. 그렇게 좋은 소스는 아니나 런타임 때 레티나 디스플레이인지 체크하는 방법이다. float displayScale = 1; if ([[NSScreen mainScreen] respondsToSelector:@selector(backingScaleFactor)]) { NSArra.. 더보기
CFNetwork SSLHandshake failed (-9824) Mac OS 10.11 오면서 한번 했던 삽질인데, 따로 어딘가에 기록하지 않아서 다른 프로젝트 하면서 또 시간낭비 했다. NSError* error = nil; NSURL* requestURL = nil;requestURL = [NSURL URLWithString:@"https://mytesturl.jsp"]; // todo : 확인할 URL 정보를 입력한다.NSXMLDocument* xmlDoc = [[NSXMLDocument alloc] initWithContentsOfURL:requestURL options:NSXMLDocumentTidyXML error:&error];NSLog(@"xmlDoc(%@)", xmlDoc); 위의 예제에서 테스트 URL(https://mytesturl.jsp)은 각자.. 더보기
*** -[MyWindowController tableView:objectValueForTableColumn:row:]: message sent to deallocated instance App개발하다가 TableView를 사용하다가 죽는 경우가 있었다. 원인을 찾기 위해 Enable Zombie Objects를 했다. 예전엔 plist를 직접 입력했는데, XCode를 7.3으로 올리니 체크박스 형식으로 설정이 가능했다. 다음의 로그가 추가로 찍혔다. *** -[MyWindowController tableView:objectValueForTableColumn:row:]: message sent to deallocated instance 결론적으로 말하면 ARC에서 delegate나 dataSource를 사용했으면 dealloc에서 반드시 nil로 초기화 해줘야 한다. 더보기
Help Indexer 파일 받기 Help Indexer 특정버전에서는 포함되지 않을 수 있다. developer.apple.com에서 Download for Apple Developers에서 Auxiliary Tools for XCode항목을 검색해서 Help Indexer가 포함된 패키지를 받아서 설치하면 된다. Copyright © 2015 by ZAMCOM, All rights reserved. 더보기
Apple help book 만들기(도움말 만들기) MS Windows에서는 확장자가 chm인 도움말 파일이 있듯이, Mac OS X에서는 확장자가 help로 되어 있는 help book 파일이 존재한다. Help book파일은 Apple에서 기본 제공하는 Help Viewer를 통해서 보여주는데, 다른 응용 프로그램의 help book파일도 함께 볼 수 있고, 검색 기능을 제공하는 등 편리하게 이용할 수 있다. Help book은 HTML으로 작성된 도움말을 모아둔 폴더로 되어 있으며, 이미지, AppleScript, QuickTime Movie등을 포함할 수 있다.응용프로그램에서 사용하는 help book을 만들기 위해서는 다음 두가지가 필요하다. 1. 타이틀 페이지2. 인덱스 파일 내용 출처 : https://developer.apple.com/li.. 더보기
initWithContentsOfURL의 캐싱 문제 기존에는 initWithContentsOfURL를 이용해서 데이터를 가져왔는데, 이게 Cache된 데이터를 가져오는 문제가 있다는 것을 알았다. 기존에 서버에 최신 버전정보가 있는 xml을 두고 initWithContentsOfURL로 데이터 값을 읽는 코드를 작성했었다. NSString* newVersion = [NSString stringWithFormat:@"%@/NewVersion.xml", liveUpdateServer];NSURL* versionURL = [NSURL URLWithString:newVersion];NSXMLDocument* doc = [[NSXMLDocument alloc] initWithContentsOfURL:versionURL options:NSXMLDocumentTidy.. 더보기
NSZombieEnabled로 Bad Access에러 찾기 Objective C로 개발할 때 메모리 관리를 잘못하면 crash가 발생하게 된다. 최신 XCode에는 Analyer를 통해서 잘못된 메모리 사용을 그래픽 적으로 볼 수 도 있다. Product>Analyze를 눌러보면 파란색 사각형에 하얀색 아이콘이 생기는데, 클릭해보면, 놀랍게도 어떤 순서로 접근했을 때 문제가 발생할 수 있는지 시각적으로 볼 수 있다. 이것 말고, 런타임때 문제가 발생했을 때 알고 싶다면 실행시 환경변수(Environment Variables)에 NSZombieEnabled 값을 줘서 위치를 찾아낼 수 도 있다. Product > Scheme > Edit Scheme > Run > Arguments > Environment Variables 에 NSZombieEnabled를 YES.. 더보기
Apple 오픈 소스 사이트 Apple에서 제공하는 오픈소스 사이트이다. http://www.opensource.apple.com/ Objective C도 내부를 살펴보면 C++과 어셈블리어로 되어 있다.시간 날때마다 조금씩 파보자. Copyright © 2015 by ZAMCOM, All rights reserved. 더보기