문제

내가 전화 할 때까지 모든 것이 잘 작동합니다 saveFile 파일을 디스크에 다시 작성하는 방법 (아래 표시). 내가 뭘 잘못하고 있죠?

이것은 내의 일부입니다 viewDidLoad 파일을 여는 방법이 잘 작동합니다.

//Get The Path
[self initPath];

dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath];      

if (accountsArray == nil) {
    accountsArray = [[[NSMutableArray alloc]init] autorelease];
}

if (countArray == nil) {     
    countArray = [[[NSMutableArray alloc]init] autorelease];
}

countArray = [dictionary objectForKey:@"count"];
accountsArray = [dictionary objectForKey:@"username"];

그런 다음 테이블 뷰에로드합니다. 그런 다음 새 항목을 추가하여 잘 작동합니다. 그런 다음이 방법을 호출하여 저장하면 충돌합니다.

-(void)saveFile {
    [dictionary setObject:accountsArray forKey:@"username"];
    [dictionary setObject:countArray forKey:@"count"];
    [dictionary writeToFile:accountsFilePath atomically:YES];   
}
도움이 되었습니까?

해결책

// 경로를 찾을 수없는 경우 파일은로드되지 않고 사전이 nil입니다.

dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath];

// AccountSarray, CountArray를 처음 만들 때

if (accountsArray == nil) {
    accountsArray = [[[NSMutableArray alloc]init] autorelease]; }

if (countArray == nil) {     
    countArray = [[[NSMutableArray alloc]init] autorelease]; }

// 왜 당신이 새로운 것을 다시 새로 할당 하는가, 방금 시작한 오래된 것은 어떻습니까?

// 사전이 nil이면 Countarray도 NIL이됩니다.

countArray = [dictionary objectForKey:@"count"];
accountsArray = [dictionary objectForKey:@"username"];

//// //// ////////////////////////////////////////////////////////////////

충돌 메시지는 무엇입니까?

당신의 계정 filepath는 무엇입니까?

사전 파일을 읽을 수 있습니까?

당신이 알고 싶은 한 가지

WritetOfile은 귀하를위한 새 폴더를 만들지 않습니다

따라서 AccountsFilePath의 모든 폴더가 존재해야합니다.

그렇지 않으면 nsfileManager를 사용하여 해당 폴더를 만들 수 있습니다.

다른 팁

당신은 자동 소속입니다 countArray 그리고 accountsArray 초기화 직후. 당신이 그들을 저장하려고 할 때 이미 공개 될 수 있습니다. 댓글을 달아보십시오 autorelease 둘 다를 위해 dealloc 방법).

모든 변수가 범위에 있습니까? 나는 계정 filepath와 사전이 클래스 변수라고 가정합니다. 그렇지 않다면 ViewDidload의 끝에서 죽을 수도 있습니다.

당신을 물릴 수있는 또 다른 것은 사전의 용량이 너무 작거나 iPhone이 SetObject 메소드를 사용하여 키/값 쌍을 덮어 쓰는 것을 좋아하지 않는다는 것입니다. 아마도 removeObjectForKey를 호출해보십시오. 그런 다음 위와 같이 다시 추가합니까?

당신은 이미 이것을했지만, 나는 GDB의 사전과 계정 filepath를 검사하거나 writeTofile 바로 직전에 nslog를 사용하여 : Atomically : Call.

또한이 사전과 관련하여 다른 일을 보여주기 위해 더 많은 주변 코드를 공유 할 수도 있습니다.

나는 무작위 충돌을 디버깅하기 위해 Nszombie를 많이 사용하고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top