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

2012년 3월 17일 토요일

mac OSX 의 구글 크롬브라우저에서 확장프로그램 설치가 안되는 문제

확장프로그램을 설치하면.. 계속 확인중이라고만 뜨거나 설치가 안되는 문제가 발생한다.. 그 이유는 ? 

다운로드 경로를 변경했기 때문이다.. 윈도우도 마찬가지로 다운로드 폴더를 생성해주면 된다고한다.





다음과 같이 확인중이 잠시 동안만 뜨다가.. 설치가 잘 된다.



2012년 2월 10일 금요일

iOS 셀렉터 selector


@selector
프로그램내부에서 메서드를 호출하면 컴파일 시 내부에 표현되는값으로 변경을 가해서 호출합니다.
이러한내부 표현에 해당하는 데이터 타입을 SEL타입이라고 합니다.
delegate나함수 포인터와 같은 역할을 하는 지시자입니다.
사용방법은 @selector(메서드명)으로리턴 받습니다.
매개변수가 있는 경우에는 메서드 명 뒤에 :을붙여서 사용합니다
이@selector를호출할 때는 객체가 performSelector:@selector(메서드)의형태나 SEL변수를 이용합니다.
매개변수가object인 경우에는performSelector:@selector(메서드)withObject:객체 의형태로 호출합니다.
이를적당히 이용하면 동적으로 메시지를 변경할 수 있습니다

iOS기존의 앱을 업데이트할떄


XCode3.2.3 과 SDK4로 버전업한 후, 기존 앱을 업그레이드 할 때 간단한 Tip 입니다.

1. XCode3.2.3과 SDK4로 업그레이드 한다. 별도로 기존 XCode 3.1 버전을 따로 보관할 필요가 없습니다.

2. 기존 앱을 새 XCode3.2.3에서 연다.

3.Group & Files를 right click -> Get Info 후

  3-1.General Tab 에서
Project Format 을 Xcode 3.2-compatible 로 바꾼다.

 3-2.Build Tab 에서

 Base SDK를 iPhone Device 4.0(배포시), 혹은 iPhone Simulator 4.0(테스트시) 로 바꾼다

 iPhone OS Deployment Target 을 iPhone OS 3.0 (즉 지원하고자 하는 하위버전으로) 로 바꾼다.


이렇게 하시면 됩니다.

NSDictionary


Dictionary

키와 인스턴스로 이루어진 데이터의 모임입니다
키로 인스턴스를 찾을 수 있습니다.<?xml:namespace prefix = o />
키는 유일해야 하며 일반적으로 NSString 입니다.
키와 연결된 인스턴스는 데이터 유형에 관계가 없지만 nil은 안됩니다.

1. NSDictionary
NSDictionary는 수정이 불가능한 Dictionary입니다.

멤버 메서드
+(id)dictionary
비어있는 dictionary 생성
+(id)dictionaryWithObject:(id)anObject forKey:(id)aKey
aKey를 key로 해서 anObject를 내용으로 갖는 인스턴스를 갖는 dictionary 생성
-(id)initWithObjects:(NSArray *)Objects forKeys:(NSArray *)Keys
Keys를 키 값으로 해서 Objects를 내용으로 초기화
-(id)initWithObjects:(id *)Objects forKeys:(id *)Keys count:(NSUInteger)count
Keys를 키 값으로 해서 Objects를 내용으로 count 개수 만큼 초기화
-(id)initWithObjectsAndKeys:(id)Object,(id)Key,… nil
Object와 Key로 초기화
-(NSUInteger)count
개수 리턴
-(id)objectForKey:(id)aKey
aKey에 해당하는 인스턴스 리턴
-(NSArray *)allKeys
모든 키값을 배열로 리턴
-(NSArray *)allValues
모든 키를 포함하는 배열을 리턴
-(NSEnumerator *)keyEnumerator
키 값을 열거자로 리턴
-(NSEnumerator *)objectEnumerator
키 값을 열거자로 리턴
-(NSArray *)allKeysForObject:(id)anObject
anObject를 갖는 모든 키를 배열로 리턴


NSDictionary * greeting = [[NSDictionary alloc] initWithObjectsAndKeys:@"안녕하세요", @"아침인사", @"식사 하셨어요", @"오후인사", @"내일뵐께요",@"저녁인사",nil ];
    NSLog(@"아침인사: %@", [greeting objectForKey: @"아침인사"]);
        NSLog(@"점심인사: %@", [greeting objectForKey: @"오후인사"]);
        NSLog(@"저녁인사: %@", [greeting objectForKey: @"저녁인사"]);
   
    NSArray * keys = [greeting allKeys];
    NSArray * objects = [greeting allValues];
    int i;
    for(i=0; i<[greeting count]; i++)
    {
       NSLog(@"Key:%@ Value:%@", [keys objectAtIndex:i], [objects objectAtIndex:i]);
    }    
   
    NSDictionary * greeting1 = [[NSDictionary alloc] initWithObjects:objects forKeys:keys];
    NSEnumerator *it;
    it = [greeting1 keyEnumerator];
    id var;
    for(i=0; i<[greeting count]; i++)
    {
       var = [it nextObject];
       NSLog(@"Key:%@ Value:%@", var, [greeting objectForKey: var]);
    }

=========================================================================================
2. NSMutableDictionary
NSMutableDictionary는 수정이 가능한 Dictionary입니다.
아래와 같은 메서드가 추가됩니다.
+(id) dictionaryWithCapacity:size
size 크기만큼으로 메모리 할당
-(id)initWithCapacity:size
size 크기만큼으로 초기화
-(void)setObject:(id)anObject forKey:(id)aKey
aKey를 Key로 anObject를 추가합니다.
둘 다 nil이면 안되고 aKey가 존재한다면 내용은 대체됩니다.
-(void)removeAllObjects
모든 엔트리 삭제
-(void)removeObjectForKey:key
key에 해당하는 인스턴스 삭제
-(NSArray *)keysSortedByValueUsingSelector:@selector(비교메서드:)
이 경우 내용에 따라서 정렬한 후 key를 배열로 리턴합니다.

NSMutableDictionary *greeting = [NSMutableDictionary dictionary];
        [greeting setObject:@"안녕하세요" forKey: @"아침인사"];
        [greeting setObject:@"식사 하셨어요" forKey:@"오후인사"];
        [greeting setObject:@"내일뵐께요" forKey:@"저녁인사"];
        [greeting setObject:@"잘자요" forKey:@"밤인사"];
    [greeting setObject:@"밤새 별일 없으셨어요" forKey: @"아침인사"];
   
    NSArray * keys = [greeting allKeys];
      
    int i;
    for(i=0; i<[greeting count]; i++)
    {
       NSLog(@"Key:%@ Value:%@", [keys objectAtIndex:i], [greeting objectForKey:[keys objectAtIndex:i]]);
    }    
   
    [greeting removeObjectForKey:@"밤인사"];
    keys = [greeting allKeys];
    NSLog(@"삭제한 후 -------------");
    for(i=0; i<[greeting count]; i++)
    {
       NSLog(@"Key:%@ Value:%@", [keys objectAtIndex:i], [greeting objectForKey:[keys objectAtIndex:i]]);
    }

    keys = [greeting keysSortedByValueUsingSelector:@selector(compare:)];

    NSLog(@"내용으로 정렬 한 후 ----");
    for(i=0; i<[greeting count]; i++)
    {
       NSLog(@"Key:%@ Value:%@", [keys objectAtIndex:i], [greeting objectForKey:[keys objectAtIndex:i]]);
    }

NSString&NSData


C언어의문자열은 char를기준으로 한 ASCII문자열입니다.
하자만Objective- C언어의 문자열클래스가 제공하는 문자열은 unichar유니코드 표준에따른 멀티바이트 문자입니다.
1.String 클래스의종류
-NSString: 내용을 변경할수 없는 문자열 클래스
-NSConstantString: 문자열상수로 주소를 변경할 수 없는 문자열 클래스
-NSMutableString: 내용을변경할 수 있는 문자열 클래스

NSString객체에 문자열을 대입할때는 NSConstantString 타입을대입할 때는 일반 value형
변수처럼직접 대입이 가능하며 리턴도 가능합니다.
단주의할 점은 출력할 때 %s를사용하면 안된다는 점입니다.
%s를사용하게 되면 ascii문자(8비트)단위로 읽어서문자열을 출력하므로 이상한 문자열을 출력하게될것입니다.
이때는 %@를이용해서 출력해야 합니다.
%@를이용하게 되면 지정된 인스턴스에 description메시지를 전송하여그 메시지의 수행 결과를 리턴 받아서 출력하게 됩니다.



2.NSString 의인스턴스 생성과 문자 코드 변환
+(id)stringWithString:(NSString *)nsstring
nsstring으로인스턴스를 생성해서 리턴

-(id)initWithString:(NSString *)nsstring
nsstring으로초기화

-(NSUinteger)length
문자의개수 리턴

-(id)initWithUTF8String:(const char *)bytes
널문자로 끝나는 형식의 C언어문자열에서 정보를 복사한 후 초기화

-(constchar *)UTF8String
C언어문자열을 가리키는 포인터를 리턴


-(NSString*)stringWithString:(NSString *)nsstring
메모리를할당하고 nsstring으로초기화하는 생성자의 역할을 수행 – new와같은 역할
-(NSString*)stringByAppendingString: (NSString *)nsstring
nsstring을호출하는 인스턴스에 결합
-(BOOL)isEqualToString:(NSString *)nsstring
문자열의값이 같은지 여부를 리턴
-(NSComparisonResult)compare: (NSString *)nsstring
크기비교를 해서 NSComparisonResult로리턴
NSComparisonResult는열거형입니다.
-(NSString*)uppercaseString
대문자로변환해서 리턴
-(NSString*)lowercaseString
소문자로변환해서 리턴

3.NSString의 부분문자열 얻기
문자열을부분적으로 리턴 받을 수 있습니다.
-(NSString*)substringToIndex:정수
앞에서부터정수만큼 리턴
-(NSString*)substringFromIndex:정수
정수번째부터 리턴
-(NSString*)substringWithRange: : NSMakeRange(숫자1,숫자2)
숫자1부터숫자2까지리턴
-(NSRange)rangeOfString:(NSString *)nsstring
nsstring의위치와 개수를 리턴
NSRange는구조체로 location과length를가지고 있습니다.

===============================================
4.NSMutableString 클래스
NSString으로부터상속받아서 만들어지며 추가 및 삽입 및 삭제 등의메서드가 추가되어 있습니다.
문자열의내용을 변경할 수 있는 클래스
이클래스의 인스턴스는 문자열의 내용이 변경되도 주소가변경되지 않습니다.

================================================
5.NSData 클래스
이클래스는 바이트 배열을 다루는 클래스입니다.
파일입출력이나 네트워크에서는 문자열을 바이트 단위로사용해야 하는 경우가 있습니다.
이러한경우 NSString 만으로모든 처리를 할 수는 없습니다.
이런경우 사용되는 클래스가 NSData클래스입니다.

-(id)dataWithBytes:(const void *)bytes (NSUinteger)length
length만큼 바이트를 할당해서메모리를 할당
-(id)initWithBytes:(const void *)bytes length:(NSUinteger)length
bytes가지정한 위치부터 length까지로초기화
-(id)dataWithData:(NSData *)aData
aData를복사해서 메모리를 할당
-(id)initWithData:(NSData *)aData
aData의내용으로 초기화해서 리턴
-(NSUinteger)length
길이를리턴
-(cosst void *)bytes
포인터를리턴
-(NSString *)description
문자열로리턴

==========================================================
6.NSMutableData 클래스
변경가능한 Data 클래스입니다.
데이터의추가 및 삭제 등의 메서드가 더 존재 합니다.

2012년 2월 8일 수요일

오브젝티브C ios 프로토콜


1.프로토콜
Object의역할이나 동작을 표현하는 메서드의 집합
Java의Interface가Objective-C의프로토콜을 도입한 개념입니다.
여러개의 클래스 또는 오브젝트가 공통적인 동작을 가지고있을 때 이를 프로토콜에 정의해 두고 이를 상속받아서자신의 특성에 맞게 구현 한 후 사용합니다.
이렇게프로토콜로부터 상속받아서 이를 전부 구현 하게 된경우를 프로토콜을 Confirm했다고 합니다.

2.프로토콜의선언
프로토콜을선언할 때는 아래와 같은 방법을 이용하게 됩니다.

@protocol프로토콜이름
메서드선언;
@end

일반적으로프로토콜의 이름은 첫 글자가 대문자로 시작합니다.
위처럼 선언한 후 .h 파일에저장하는 것이 일반적입니다.

3.프로토콜의적용
프로토콜을적용할 때는 아래와 같은 방법을 이용하게 됩니다.

@interface클래스이름:슈퍼클래스이름<프로토콜이름>
{ 변수선언; }
메서드선언
@end

위처럼작성하면 프로토콜에 선언된 모든 메서드가 선언된것과 같은 효과를 나타내게 됩니다.
이 때주의할 점은 프로토콜에 선언된 모든 메서드를 구현해야하며 여러 개의 프로토콜을 적용하고자 하는 경우 <> 안에서 ,로구분하여 나열하면 됩니다.
프로토콜에선언된 모든 메서드를 구현하지 않으면 Warning을나타내게 될 것입니다.

오브젝티브씨 ios 객체와 메시지


1.표현식
1) 객체변수에 메모리 할당하기
objective-C에는모든 객체는 포인터 변수입니다.
단예외적으로 id 타입에는*을붙이지 않습니다.

클래스명*객체명 =[[클래스명 alloc]init]
여기서alloc는메모리 할당을 해주는 메서드이며 init은 초기화를 해주는메서드입니다.

2)메서드
-메서드의 선언
(리턴타입)메서드명;
(리턴타입)메서드명:(매개변수의자료형)매개변수명
리턴타입과 매개변수의 자료 형을 생략하면 id타입으로 간주합니다.

-메서드의 정의
(리턴타입)메서드명:(매개변수의 자료형)매개변수
{
메서드의내용;
}

-메서드 호출
인수가없는 메서드 호출
[객체명 메서드명]; 또는변수명 = [객체명 메서드명];

매개변수가 있는 경우 메서드 호출
- 1개인경우
[객체명 메서드명: 값];

- 2개이상인 경우
[객체명 메서드명:값1 :값2….];

[객체명 메서드명 매개변수명:값1 매개변수명:값2….];


3)클래스의 선언 및구현
-클래스의 선언
@interface 클래스명:부모 클래스명
{
인스턴스변수들...
}
-메소드 선언;
@end

-클래스의 구현
@implementation 클래스명
-메서드의 선언
{
내용;
}
@end