아이폰어플개발정보2011. 3. 12. 17:14


//사용 예

- (void)sample {

NSMutableArray *a = [NSMutableArray array];

CGPoint p = CGPointMake(5.0, 6.0);

NSDictionary *pointObject = [NSDictionary dictionaryWithCGPoint:p];

[a addObject:pointObject];

[a addObject:[NSDictionary dictionaryWithCGSize:CGSizeMake(50.0, 60.0)]];

CGRect rect = CGRectMake(20.0, 40.0, 100.0, 60.0);

[a addObject:[NSDictionary dictionaryWithCGRect:rect]];

NSLog(@"%@",a);

CGPoint point = [pointObject CGPointValue];

CGSize size = [[a objectAtIndex:1] CGSizeValue];

CGRect rect2 = [[a objectAtIndex:2] CGRectValue];

NSLog(@"point: %f,%f",point.x,point.y);

NSLog(@"size: %f,%f",size.width,size.height);

NSLog(@"rect: %f,%f,%f,%f",rect2.origin.x,rect2.origin.y,rect2.size.width,rect2.size.height);

}



출처 : http://blog.naver.com/PostView.nhn?blogId=hana_815&logNo=60120337801
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 6. 24. 14:22
iPhone NSDictionary 객체로 Plist (XML) 파일 읽기
너무 단순한가?
여기서 중요한 부분은 샌드박스 내의 경로를 읽어오는 것이다.

- (NSDictionary *)readPlistFile:(NSString *)pFilepath {

    NSArray *arrayPaths = NSSearchPathForDirectoriesInDomains(
                                                              NSDocumentDirectory,
                                                              NSUserDomainMask,
                                                              YES);
    NSString *docDir = [arrayPaths objectAtIndex:0];   
    NSString *filePath = [[NSString alloc] initWithFormat:@"%@/%@", docDir, pFilepath];   
    NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:filePath];

    return dic;
}



근데, 이걸 작업하던 중에 재밌는 현상을 발견했는데, 아직 풀진 못했다.
A 라는 클래스에서 멤버변수로 NSDictionary 객체가 있다. 그리고 특정 메소드에서 위 녀석을 실행하게 되는데
그 메소드의 영역을 벗어나게 되면 멤버변수로 있던 딕셔너리객체가 다시 nil 이 되는거다. ㅡㅡ;;;
아니, 정확히 말해서 nil 인지 아닌지는 모르겠으나, 객체의 사용이 불가능해지는 걸로 보아 메모리 바이올레이션 오류를 내는듯 하다.

이걸 확인해봐야겠다.



출처 : http://blog.naver.com/PostView.nhn?blogId=suny4rang&logNo=50082356335
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 6. 24. 14:21
iPhone NSDictionary 와 Array 와 Plist(XML) 파일의 구조
키-밸류 코딩이라 하여 "Key=Value" 형태의 자료구조를 이용하는 개발방식인데,
델파이에서 TStringlist 정도의 편리함을 생각하면 되겠다.

그런데 이게 XML 파일과도 연계가 되어서 사용이 된다. 음.. 잠깐, 그런데 "Key=Value" 형태라고 하면
1대1 대칭자료형 아니냐? 그런데 1대N 형태의 자료구조도 가능하다는 얘기를 하고 싶은거다.

Key 는 보통 String 형으로 많이 사용한다. Value 역시 마찬가지지, 주로 프로퍼티 파일을 읽거나 쓸때 자주 쓰는데,
Value 를 단순 String 값이 아니라  String 들의 배열로 다룰 수가 있다. 아래 두가지 XML 파일이 있다. 이건 Plist 라는 iPhone 개발시에
주로 Property 파일로 활용되는 파일이다.

우선 1:1 방식인 경우

봐봐, 그냥 <key> 와 <string> 이다. 이런 경우에 값을 읽기 위해서는

iPhone 의 Document 폴더 밑에 있는 특정 "plist" 파일을 NSDictionary 로 읽어서 반환하는 메소드다.
- (NSDictionary *)readPlistFile:(NSString *)pFilepath {
    NSArray *arrayPaths = NSSearchPathForDirectoriesInDomains(
                                                              NSDocumentDirectory,
                                                              NSUserDomainMask,
                                                              YES);
    NSString *docDir = [arrayPaths objectAtIndex:0];   
    NSString *filePath = [[NSString alloc] initWithFormat:@"%@/%@", docDir, pFilepath];   
    NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:filePath];
    return dic;
}

바이너리의 번들형태로 배포된 plist 파일을 읽을때는 이렇게 한다.

NSBundle* bundle = [NSBundlemainBundle];

NSString* plistPath = [bundle pathForResource:@"coordinates"ofType:@"plist"];

NSDictionary *dict = [NSDictionarydictionaryWithContentsOfFile:plistPath];


추가로 NSDictionary 로부터 모든 키들을 NSArray 로 뽑을때 정렬된 상태로 읽으려면

NSArray *array = [[dict allKeys] sortedArrayUsingSelector:@selector(compare:)];


가져온 NSDictionary 로부터 1:1 매칭의 자료를 쓰는건 매우 쉽다.
NSString *strKey = [[dict allKeys] objectAtIndex:index];
해당 index 에 존재하는 Key 를 가져온다. 그럼 그 key 에 해당하는 value 를 가져오려면
NSString *strValue = [dict objectForKey:"key"];

자, 이젠 1:1 이 아닌 1:N 인 경우를 보자. plist 파일의 구조는 아래와 같다.

이건 똑같다. 똑같다는게 무슨 말이냐면, value 를 받을때 array 로 받는다고 생각하면 끝 ㅡㅡ;;
코드 예는 이렇다.
NSArray *array = [dict objectForKey:@"A"];



출처 : http://blog.naver.com/PostView.nhn?blogId=suny4rang&logNo=50082987469
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 6. 24. 11:36
NSDictionary 쓰고 읽는 방법

by nik 13. 5월 2009 13:49

// you should add empty file "hiscores" in your xCode project

 - (void)save{

 NSLog(@"saving...");

  NSDictionary *hiscores;

 //adding object and keys;

 //...

 //...

 NSString *writableFilePath = [self createEditableCopyOfFileIfNeeded:[NSString stringWithString:@"hiscores"]]; 

 if (![hiscores writeToFile:writableFilePath atomically:YES]){

  NSLog(@"WRITE ERROR");

 }

 }

- (void)load{

 NSLog(@"loading...");

 NSString *writableFilePath = [self createEditableCopyOfFileIfNeeded:[NSString stringWithString:@"hiscores"]];

 hiscores = [NSDictionary arrayWithContentsOfFile:writableFilePath];

}

- (NSString *)createEditableCopyOfFileIfNeeded:(NSString *)_filename {

    // First, test for existence.

    BOOL success;

    NSFileManager *fileManager = [NSFileManager defaultManager];

    NSError *error;

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

    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *writableFilePath = [documentsDirectory stringByAppendingPathComponent: _filename ];

 
    success = [fileManager fileExistsAtPath:writableFilePath];

    if (success) return writableFilePath;

 
 // The writable file does not exist, so copy the default to the appropriate location.

 NSString *defaultFilePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: _filename ];

    success = [fileManager copyItemAtPath:defaultFilePath toPath:writableFilePath error:&error];

    if (!success) {

  NSLog([error localizedDescription]);

        NSAssert1(0, @"Failed to create writable file with message '%@'.", [error localizedDescription]);

    }

 return writableFilePath;

}



출처 : http://blog.naver.com/PostView.nhn?blogId=amoros21&logNo=140107111174
Posted by 오늘마감

댓글을 달아 주세요