2014-07-07 9 views
0

plist를 사용하는 tableView를 사용하여 몇 가지 confing 설정을합니다. 데이터를 채우기 위해 파일이 코드를 2 주 정도 작업하고 있습니다.이 코드가 작동하는 것 같습니다.plist에 문자열 바꾸기

이 내 코드입니다 :

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath]; 

    if ([[[week objectAtIndex:indexPath.row] objectForKey:@"checkmark"] isEqual:@"0"]) { 
     [selectedCell setAccessoryType:UITableViewCellAccessoryCheckmark]; 
     [[week objectAtIndex:indexPath.row] setObject:@"1" forKey:@"checkmark"]; 
    } 
    else { 
     [selectedCell setAccessoryType:UITableViewCellAccessoryNone]; 
     [[week objectAtIndex:indexPath.row] setObject:@"0" forKey:@"checkmark"]; 
    } 

    [[week objectAtIndex:indexPath.row] writeToFile:@"week.plist" atomically:YES]; 

    NSLog(@"%@, %@", selectedCell.textLabel.text,[[week objectAtIndex:indexPath.row] objectForKey:@"checkmark"]); 
    NSLog(@"Array de week seleccionando %@", week); 
} 

모든 것이 (내가 nslogs을 사용하여 그 이유는)이 debbug 지역에서 잘 작동하는 것 같다, 내 문제는 즉, PLIST 파일에 변경 내용을 저장할 수 없습니다이다, 어떤 종류의 캐시 또는 그런 식으로 저장하는 것 같습니다.

업데이트

나는이 코드를 시도했다 :

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath]; 

    NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
    NSString *plistPath = [rootPath stringByAppendingPathComponent:@"week.plist"]; 
    NSDictionary *plistDict = [NSDictionary dictionaryWithObjects:week forKeys:week]; 

    NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:plistDict 
                    format:NSPropertyListXMLFormat_v1_0 
                 errorDescription:nil]; 

    if ([[[week objectAtIndex:indexPath.row] objectForKey:@"checkmark"] isEqual:@"0"]) { 
     [selectedCell setAccessoryType:UITableViewCellAccessoryCheckmark]; 
     NSString *uno = @"1"; 
     [[week objectAtIndex:indexPath.row] setObject:uno forKey:@"checkmark"]; 
    } 
    else if ([[[week objectAtIndex:indexPath.row] objectForKey:@"checkmark"] isEqual:@"1"]) { 
     [selectedCell setAccessoryType:UITableViewCellAccessoryNone]; 
     NSString *cero = @"0"; 
     [plistData writeToFile:plistPath atomically:YES]; 
    } 
    [[week objectAtIndex:indexPath.row] setObject:cero forKey:@"checkmarck"]; 
    NSLog(@"%@, %@", selectedCell.textLabel.text,[[week objectAtIndex:indexPath.row] objectForKey:@"checkmark"]); 
    NSLog(@"Array de checkmarks %@", week); 
} 

내가 디버그 지역에서 동일한 결과를 있었다 :

2014-07-07 22:11:21.384 experiment table view[2264:60b] Thursday, 0 
2014-07-07 22:11:21.385 experiment table view[2264:60b] Array de week seleccionando (
    { 
    Name = Sunday; 
    checkmarck = 0; 
}, 
    { 
    Name = Monday; 
    checkmarck = 1; 
}, 
    { 
    Name = Tuesday; 
    checkmarck = 0; 
}, 
    { 
    Name = Wednesday; 
    checkmarck = 0; 
}, 
    { 
    Name = Thursday; 
    checkmarck = 0; 
}, 
    { 
    Name = Friday; 
    checkmarck = 1; 
}, 
    { 
    Name = Saturday; 
    checkmarck = 0; 
} 
) 

동일 결과가

+1

'writeToFile :'메소드는 파일 이름뿐만 아니라 전체 경로가 필요합니다. 쓰기 가능한 경로에 글을 쓰고 있는지 확인하십시오. 앱 번들은 쓰기 가능하지 않습니다. – rmaddy

답변

0

plist가 bundl에있는 경우 e, 당신은 그것에 쓸 수 없습니다. '번들 안에 있음'은 XCODE에 새 파일을 수동으로 추가하여 Plist를 만드는 것을 의미합니다.

프로그래밍 방식으로 작성한 Plist에만 쓸 수 있습니다. 이러한 Plist는 번들에 있지만 앱의 문서 디렉토리에는 없습니다. Plist의 경로는

+0

번들이 무엇인지 알지 못했습니다 : P – Atlas

+0

번들은 .ipa 파일의 모든 것입니다. .ipa에서 .zip으로 파일의 접미사를 변경하고 압축을 풀 수 있습니다. 그런 다음 .app 파일이 표시되면 마우스 오른쪽 버튼을 클릭하고 '콘텐츠 표시'를 선택할 수 있습니다. – ukim

0

Sen의 덕분에 해결되었습니다. 그의 답변 덕분에 코드가 수정되었습니다.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"week.plist"]; 

NSMutableArray *week = [[NSMutableArray alloc]init]; 

//Here I add all the objects inside the Mutable Array 

[week writeToFile:path atomically:YES]; 

그런 다음 선택기에를 선택하여 PLIST에 쓰기 :

먼저 나는 프로그래밍 PLIST했습니다

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"week.plist"]; 
NSMutableArray *array = [[NSMutableArray alloc]initWithContentsOfFile:path]; 

UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath]; 

if ([[[array objectAtIndex:indexPath.row] objectForKey:@"checkmark"] isEqual:@"0"]) { 
    [selectedCell setAccessoryType:UITableViewCellAccessoryCheckmark]; 
    [[array objectAtIndex:indexPath.row] setObject:@"1" forKey:@"checkmark"]; 
} else { 
    [selectedCell setAccessoryType:UITableViewCellAccessoryNone]; 
    [[array objectAtIndex:indexPath.row] setObject:@"0" forKey:@"checkmark"]; 
} 
[array writeToFile:path atomically:YES]; 
[tableView reloadData]; 
[self.navigationController pushViewController:self animated:YES]; 
} 

감사합니다, 나는이 코드 도움말 사람을 바랍니다.