2011-10-10 4 views
1

아래와 같이 savePlist라는 사용자 지정 함수가 있다고 가정합니다. 나는 아래와 같은 코드를 실행하는 동안Objective-c에서 plist에 데이터를 쓰는 기능

CommonClass.m

- (NSString *)getDirectoryPath 
{ 
    NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *path = [pathList objectAtIndex:0]; 
    return path; 
} 

- (void)savePlist:(NSString *)fileName WithArray:(NSArray *)fileArr 
{ 
    NSString *path = [[self getDirectoryPath] stringByAppendingPathComponent:fileName]; 
    [fileArr writeToFile:path atomically:YES]; 
} 

은 더 PLIST는 생성되지 않습니다.

ABCAppDelegate.m

... 
[cc savePlist:@"example.plist" WithArray:[NSArray new]]; 
example.plist의 파일이 생성되지 않은

, 내 코드에 어떤 실수가?

감사

업데이트 : 아래의 코드를 사용하는 경우

의 xxx.plist 파일이 성공적으로 생성되었습니다.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *plistFile = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"abc.plist"]; 
NSMutableDictionary *plist = [[NSMutableDictionary alloc] initWithContentsOfFile:plistFile]; 

if (!plist) { 
    plist = [NSMutableDictionary new]; 
    [plist writeToFile:plistFile atomically:YES]; 
    NSLog(@"write plist"); 
} 

참조 : link

업데이트 2 :

나는 아래의 코드 변경 :

NSLog(@"code"); 
[cc savePlist:@"example.plist" WithArray:[NSArray new]]; 
NSLog(@"code"); 

- (void)savePlist:(NSString *)fileName WithArray:(NSArray *)fileArr 
{ 
    NSLog(@"fileName = %@, fileArr = %@", fileName, fileArr); 
    NSString *path = [[self getDirectoryPath] stringByAppendingPathComponent:fileName]; 
    NSLog(@"path = %@", path); 
    [fileArr writeToFile:path atomically:YES]; 
} 

그냥 인쇄 :

2011-10-10 14:24:00.560 ABC[3390:207] code 
2011-10-10 14:24:00.561 ABC[3390:207] code 

없음 메시지 fil eName = 및 fileArr =, 또한 path = 로그에 출력하므로 savePlist 내의 코드가 실행되지 않았습니까?

+1

다음은 확인해야 할 몇 가지 사항입니다. 빈 배열이 아닌 다른 것을 전달하려고 했습니까? getDirectoryPath 및 경로의 결과를 인쇄하여 예상 한 경로인지 확인 했습니까? writeToFile이 YES를 반환하는지 확인 했습니까? –

+0

나는 darren과 동의합니다. 이것은 가장 가능성있는 경로입니다. NSLog (@ "% @", 경로)를 추가하는 것이 좋습니다. writeToFile 메시지 바로 전에 파일 경로를 디버그합니다. – EladG

+0

알았어, 고마워, 내 질문에 업데이트를 추가했습니다, 친절하게 확인하시기 바랍니다. –

답변

0

일반적인 클래스 개체가 인스턴스화되지 않은 것처럼 보입니다. 모든 메시지를 nil에게 보냈습니다. 이 메소드를 호출하는 앱 위임 코드에 cc 로깅을 시도해보십시오.

당신은 (에 따라 다를 수 있습니다 설정)를, 당신의 일반적인 클래스의 인스턴스를 만들 수

cc = [[CommonClass alloc] init]; 

뭔가를해야합니다.

+0

내 ABCAppDelegate.h에 CommonClass를 가져 와서 CommonClass * cc를 정의했습니다. –

+0

예, 그렇지 않으면 컴파일러 오류가 발생하지만 인스턴스를 생성 했습니까? – jrturton

+0

제안에 감사드립니다. 예 CommonClass의 인스턴스를 만들지 않았습니다. 방금 클래스의 인스턴스를 생성하여 문제를 해결했습니다. –

관련 문제