BLOG

Cmd + 0(숫자) : 왼쪽 네비게이션부분 닫기/열기
Cmd + Option + 0(숫자): 오른쪽 속성창부분 닫기/열기

Cmd + Shift + O : 빨리 열기 (단축키 누르고 바로 파일명 치면 원하는 파일을 금방 열 수 있음)

Cmd + E -> Cmd + G : Cmd+E를 누르면 현재 커서 위치의 단어가 찾기 단어가 되고 Cmd+G를 누르면 해당 단어로 다음찾기가 실행

Cmd + Ctrl + Shift + / (Cmd + Ctrl + ?) : 빠른도움말.  현재 커서 위치에 있는 것에 대한 도움말 있는 경우 팝업으로 보여줌

Cmd + Ctrl + J : 현재 커서 위치에 있는 것의 Definition이 있는 파일 염.  (Cmd + Opt + Ctrl + J 로하면 오른쪽 창에 열림)
Cmd + Ctrl + Click 과 동일


저작자 표시
신고
Posted by xiles

Comment

UITableView inherits UIScrollView and it uses it's own protocol (UITableViewDelegate) for 'delegate' property.
Usually using different delegate name like myDelegate in order to avoiding conflict with UIScrollView's delegate property when creating own view inherits UIScrollView. 

How can I use property name 'delegate' with my own protocol?
Check following codes. 

MyView.h

@protocol MyViewDelegate;

@interface MyView: UIScrollView
@property (nonatomic, weak) id<MyViewDelegate, UIScrollViewDelegate> delegate;
@end

@protocol MyViewDelegate <NSObject, UIScrollViewDelegate>
- (void)myViewDidFinish:(MyView *)sender;
@end


MyView.m

@implementation MyView

@synthesize delegate = _myViewDelegate;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [super setDelegate:self]; // do this if you want to implement UIScrollView's delegate
}

- (void)setDelegate:(id<MyViewDelegate, UIScrollViewDelegate>)delegate
{
    _myViewDelegate = delegate;
}

- (void)test
{
    if (_myViewDelegate && [_myViewDelegate respondsToSelector:@selector(myViewDidFinish:)])
        [_myViewDelegate myViewDidFinish:self];
}

#pragma mark UIScrollView Delegate

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    // Do what you want to do
}

@end


신고
Posted by xiles

Comment

다른 SVN 클라이언트에서는 잘 접속되는데 Xcode 4.2에서는 유독 SVN 연결이 잘 안되는 경우가 있다. SVN 주소가 https로 되어 있는 경우.

이런 경우 시도해볼 수 있는 방법은?

1. 사파리를 띄운다.
2. SVN 주소로 접속한다.
3. 신뢰할 수 없는 Certificate 어쩌구 메시지가 나온다.
4. 요 메시지 창에서 Show Certificate을 누르면  Certificate 정보가 나오고 "항상 신뢰하기"가 있는데 요걸 체크해주고 계속하기를 누른다.
5. 이제 다시 Xcode로 가서 SVN 연결을 해보면 OK! 만약 잘 안되면 Xcode 재실행 후 다시 시도해보면 된다.
 
신고
Posted by xiles

Comment

Xcode 인터페이스 빌더에서 뷰에 UILabel, UIButton 등의 오브젝트를 올려놓고 소스코드와 연결시키려면 IBOutlet과 IBAction을 이용해서 연결해준다. 

Xcode 3.x 버전에서는 인터페이스 빌더(Interface Builder)가 별도의 어플리케이션으로 돌아갔지만, Xcode 4.x 버전에서는 인터페이스 빌더가 통합되었고 그러면서 좀 더 쉽게 작업을 할 수 있게 되었다.

- 오른쪽에 .xib 파일을 띄우고, 왼쪽에 .h 파일을 연다.
- 소스코드에 연결해서 사용할 오브젝트에서 마우스 오른쪽 버튼을 누른채 드래그해서 소스코드 .h 파일 위에서 드롭하면 아래처럼 소스코드에 Outlet을 설정할 수 있는 팝업이 나오고 변수 이름만 입력한 후 Connect를 누르면 바로 소스코드에 필요한 부분들이 추가된다. 


드롭하면 나오는 아래 팝업 Name 부분에 오브젝트와 연결될 변수명을 적어준다.



.h 파일에 자동으로 아래 라인이 추가된다.


.m 파일에도 아래와 같이 기본적으로 필요한 부분들이 자동으로 추가된다.


Outlet 뿐 아니라 Action 또한 쉽게 추가할 수 있다.
Outlet연결할 때와 똑같이 오른쪽 버튼 누른 후 .h로 드래그해서 드롭한다.



드롭하면 나오는 팝업에서 Connection이 기본으로 Outlet으로 되어 있을텐데 그것을 Action으로 변경해 준 후 Name에 연결할 Method 이름을 적어준 후 Connect 버튼을 누른다.



그럼 아래처럼 .h에 아래처럼 필요한 부분이 추가되고,



.m 파일에도 아래처럼 메소드가 추가된다. 

 

 Outlet, Action 한 두개 만드는 경우는 그냥 타이핑하는 것도 괜찮지만, 여러개의 오브젝트들을 IBOutlet과 IBAction을 연결시키는 작업을 하면 은근히 귀찮은데 위처럼 작업하면 매우 편하게 작업 할 수 있다.
 
신고
Posted by xiles

Comment

  1. beyond 2011.09.16 14:49 신고  Comment Address  Edit/Delete  댓글쓰기

    여기에도 올리셨군요 ㅎ 감사합니다.

Xcode 4에서는 Organizer > Repositories에서 SVN을 연결하여 관리하고 사용할 수 있다.
그런데 Xcod4의 버그인지 로그인이 필요한 SVN에 연결하려는 경우 제대로 동작하지 않는 문제가 있다.

Repository 추가는 정상적으로 되지만, 해당 Repository 에 접근할 수 있는 제대로된 Username과 Password를 입력해도 Repository에서 아무런 정보도 가져오지 못한다.

이 문제를 해결하려면 Terminal에서 먼저 아래 명령어로 한 번 해당 Repository에 접속을 하고나면 이후 Xcode4에서도 문제없이 사용할 수 있게 된다.

  
신고
Posted by xiles

Comment

  1. keynut 2011.05.02 23:03 신고  Comment Address  Edit/Delete  댓글쓰기

    오늘 드디어 4버전으로 판올림했는데 덕분에 SVN 잘 해결했습니다~

  2. 좐수 2011.05.06 15:08 신고  Comment Address  Edit/Delete  댓글쓰기

    좋은 정보 감사합니다^^

  3. 욱스 2011.08.05 21:11 신고  Comment Address  Edit/Delete  댓글쓰기

    좋은 정보 감사합니다. 4.0 업글하고 많이 당황했었습니다.

  4. business logo 2011.08.09 20:02 신고  Comment Address  Edit/Delete  댓글쓰기

    잘 지내시죠. 저는 세팍타크로와 주말에 서울에서 뮤지컬일을 병행하게 되어 시간이 어떻게 흘러가는지 모르게 지내고 있습니다.

  5. online logo design 2011.08.29 00:49 신고  Comment Address  Edit/Delete  댓글쓰기

    좋은 정보 감사합니다. 4.0 업글하고 많이 당황했었습니다.

  6. NFL Hats 2012.02.22 10:49 신고  Comment Address  Edit/Delete  댓글쓰기

    그런데 Xcod4의 버그인지 로그인이 필요한 SVN에 연결하려는 경우 제대로 동작하지 않는 문제가 있다.

아이폰 어플리케이션을 개발하다보면, 느끼시는 분들이 있는지 모르겠지만 가끔 텍스트나 이미지가 이상하게 좀 아주 깨끗한 느낌이 아니다라는 느낌이 들 때가 있다.
Retina에서는 거의 느끼기 어려운 것 같은데 일반 디스플레이에서는 좀 심하다 느낄 정도로 보일 때가 있다.
이미지도 작은 이미지 같은경우 뿌옇게 보인다. (작은 동그란 이미지 같은것은 거의 깨져보이는 정도)

아래 이미지를 보면 아이폰에 디스플레이된 것을 그대로 캡쳐해서 확대한 것이다.
왼쪽이 약간 더 흐리고 뿌옇게 보이고 오른쪽이 제대로 깔끔하게 보이는 상태이다.



이런 경우가 발생하는 것은 보통 Label이나 Image의 위치 지정때문이다.
보통 코딩으로 위치를 계산해서 넣을 때  어떤 것의 중간에 위치시키기 위해서 아래처럼 중간값을 계산해서 넣거나 하는 경우가 있다.

frame.origin.x = (width1 - width2) / 2;

위치나 크기값이 float으로 되어 있기때문에 그냥 별 문제 없겠지라고 생각이 들 수도 있지만, 위 이미지의 왼쪽처럼 약간 뿌옇게 보이는 상태가 된다.

이런 문제를 해결하려면 아래처럼 위치나 크기 값을 지정할 때 소수점이 없도록 아래처럼 해주면 된다.

frame.origin.x = round((width1 - width2) / 2); 


신고
Posted by xiles

Comment

NSManagedObjectModel
NSPersistentStoreCoordinator (managedObjectModel)
NSManagedObjectContext (persistentStoreCoordinator)

NSManagedObject
NSEntityDescription
NSFetchRequest
NSSortDescriptor
NSPredicate




신고
Posted by xiles

Comment

  1. 고명진 2011.12.18 11:23 신고  Comment Address  Edit/Delete  댓글쓰기

    좋은 기사 감사합니다

현재 아이폰의 언어 설정이 어떤 언어로 되어 있는지 알아내려면 아래 코드를 사용하면 된다.

NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];


NSArray* languages = [defs objectForKey:@"AppleLanguages"];


NSString* preferredLang = [languages objectAtIndex:0];


preferredLang 에는 'ko', 'en' 과 같이 현재 설정된 언어의 언어코드값이 들어간다.



신고
Posted by xiles

Comment

수많은 아이폰 어플리케이션을 보면 실행하면 알아서 폰 설정에서 지정한 언어로 실행되는 것들을 볼 수 있다.
내가 개발하는 어플리케이션에서도 이렇게 다국어(여러 언어)를 지원하려면 어떤 작업을 해줘야 할까.

우선 이번 글에서는 아주 간략히 대략 어떤 작업들을 해야하는지만 살펴보자.


다국어 지원을 하려면 아래의 리소스들을 각 언어별로 준비해줘야 한다.
- 소스 코드 안에서 사용되는 문자열들
- .xib 파일들
- 이미지/사운드/영상 파일들 (필요한 경우)


그럼 각 언어별 리소스는 어디에 저장해야 하는가?
아래 이미지처럼 프로젝트 폴더 안에 "언어코드.lproj" 폴더를 만들어주고 그 안에 각 언어별 리소스들(.strings 파일, 이미지 파일, .xib 파일 등)을 저장하면 된다.


* 언어 코드는 아래 링크를 통해서 확인할 수 있다.
   (639-1 항목에 있는 것을 사용하면 되고, 그것이 없는 경우 639-2에 있는 세글자짜리를 사용하면 된다.)
   http://www.loc.gov/standards/iso639-2/php/English_list.php


각 리소스별로 어떤 작업을 해야하는지 간략히 살펴보자

소스 코드 안의 문자열

- 소스 코딩을 하면서 번역이 필요한 문자열을 쓸 때는 NSLocalizedString, NSLocalizedStringFromTable, 
  NSLocalizedStringFromTableInBundle, NSLocalizedStringWithDefaultValue 함수를 사용한다.
  예) NSString *str = NSLocalizedString(@"Hello", @"Description for translator");

- genstrings 커맨드라인 유틸리티를 이용해서 소스코드에서 번역할 문자열을 뽑아낸다.
  => Localizable.strings 파일 생성

- 생성된 .strings 파일을 열어서 문자열들을 번역한다.

- 번역한 .strings 파일을 '언어코드.lproj' 폴더에 넣고 프로젝트에 추가한다.


.xib 파일

방법1
- ibtool 커맨드라인 유틸리티로 .xib 파일에서 번역되어야 할 문자열들을 뽑아낸다.
  => .strings 파일이 만들어짐

- 만들어진 .strings 파일을 열어서 문자열들을 번역한다.

- 번역된 .strings 파일로 .xib 파일을 만든다.

- 만들어진 .xib 파일을 '언어코드.lproj' 폴더에 넣고 프로젝트에 추가한다.

방법2
- 기본언어 .xib 파일을 '언어코드.lproj' 폴더에 복사한다.

- Interface Builder로 복사한 .xib 파일을 열어서 번역한다.
  (Tools > Strings 메뉴를 이용하면 좀 더 편하게 번역을 할 수 있다.)

방법2의 단점: 번역하는 사람이 따로 있다면 번역하는 사람이 .xib 파일을 열어서 작업해야하는 번거로움이 있다.
(번역하는 사람이 개발자가 아닌 경우 구지 Interface Builder를 깔고 어렵게 작업해야하고 잘못 건드려서 .xib 파일이 제대로 동작하지 않게될 위험도 있다.)


이미지

언어에 맞는 이미지를 만든 후 각 언어 리소스 폴더에 넣어주기만 하면 된다.
소스코드 상에서는 [UIImage iamgeNamed:@"sample"]처럼 사용하면 알아서 맞는 언어 폴더에 있는 이미지를 로딩한다.

* 사운드 파일도 이미지와 똑같은 방식



* 아이폰 개발 - 다국어 지원하기 2   (아직 미작성)


신고
Posted by xiles

Comment

  1. beyond 2010.11.12 13:24 신고  Comment Address  Edit/Delete  댓글쓰기

    기본적이지만 유용한 정보, 유용한 정리! 감사합니다.

  2. js 2011.02.08 16:31 신고  Comment Address  Edit/Delete  댓글쓰기

    깔끔한 정리 감사합니다. ^^

일반적으로 개발 할 때 SubVersion이나 CVS 등의 버전관리 툴 등을 쓰는 경우가 많다.
물론 위와 같은 전문적인 버전관리툴에는 비할바가 못되겠지만, 잘 활용하면 아주 유용한 기능이 있는데 바로 스냅샷을 만드는 기능이다.

간단히 메뉴 한 번 클릭으로 현재 소스 상태를 그대로 저장해둘 수 있어, 계속되는 소스의 변경에 주요한 부분들에 Snapshot을 만들어두면 쉽게 되돌아갈 수 있고 이전 소스 내용을 찾아보는데도 유용하다.

File 메뉴에 Make Snapshot 을 실행하면 현재 소스의 상태를 Snapshot으로 만들 수 있고 Snapshots에 들어가면 기존에 만든 스냅샷들을 보고 파일들의 변경된 부분들을 확인하거나 이전 스냅샷으로 돌아갈 수 있다.


아래는 소스의 변경된 부분을 보여주는 화면.


신고
Posted by xiles

Comment

일반적으로 개발 할 때 SubVersion이나 CVS 등의 버전관리 툴 등을 쓰는 경우가 많다.
물론 위와 같은 전문적인 버전관리툴에는 비할바가 못되겠지만, 잘 활용하면 아주 유용한 기능이 있는데 바로 스냅샷을 만드는 기능이다.

간단히 메뉴 한 번 클릭으로 현재 소스 상태를 그대로 저장해둘 수 있어, 계속되는 소스의 변경에 주요한 부분들에 Snapshot을 만들어두면 쉽게 되돌아갈 수 있고 이전 소스 내용을 찾아보는데도 유용하다.

File 메뉴에 Make Snapshot 을 실행하면 현재 소스의 상태를 Snapshot으로 만들 수 있고 Snapshots에 들어가면 기존에 만든 스냅샷들을 보고 파일들의 변경된 부분들을 확인하거나 이전 스냅샷으로 돌아갈 수 있다.


아래는 소스의 변경된 부분을 보여주는 화면.


신고
Posted by xiles

Comment

This blog is powered by Daum / Skin design by xiles