2011-10-24 1 views
0

그래서 plists에 관한 많은 양의 질문을 읽었고 그걸 저장하는 방법도 있습니다. 모르겠지만 왜 지금까지 본 iPhone-Dev-Book에서이 문제를 다루지 않았습니다 (모든 사람들이 좀 PLIST 값을 변경 싶다면didSelectRowAtIndexPath에서 pListPath를 다시 정의하는 이유는 무엇입니까?

가 가
pListPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
pListPath = [pListPath stringByAppendingPathComponent:@"piggyBanks.plist"]; 
NSLog(@"Path: %@", pListPath); 

// if the file does not exist yet, create it, and copy the plist data into it, that can be found in the bundle 
NSFileManager *fileManager = [NSFileManager defaultManager]; 

if (![fileManager fileExistsAtPath:pListPath]) { 
    NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"piggyBanks" ofType:@"plist"]; 
    [fileManager copyItemAtPath:sourcePath toPath:pListPath error:nil]; 
} 

// make the plist content available for usage 
pListContent = [[NSMutableDictionary alloc] initWithContentsOfFile:pListPath]; 
NSLog(@"pListContent: %@", pListContent); 

지금까지 너무 좋아,하지만 지금은, 사용자가 탭 경우 :있는 tableView 편집 기능),이 같은 폴더 진짜로 문서에 복사하여 PLIST에 기록 관리 pListPath, pListContent 및 기타가 .h로 정의되고 .m으로 합성되었지만 pListPathpListContentdidSelectRowAtIndexPath에 다시 정의해야 함에도 알 수있는 tableViewCell (사용자 정의 것입니다.) 그 순간.

누군가가 나에게 이유를 말해 줄 수 있습니까? 내 말은, 그것이 효과가 있다는 것은 좋은 일이지만, 내가 왜 그런 식으로해야하는지, 아니면 다른 곳에서 실수를했는지 알고 싶습니다.

고마워요! plistPath이 클래스의 문자열 속성 인 경우

답변

0

객관적인 C에서 클래스 변수를 검색하고 다양한 기사를 통해 내 길을 찾았습니다. 찾을 때까지 this 블로그/blogpost에서 자기를 설명합니다. _underscore 정말 잘 했어! 나는 이제 언더 스코어, 즉 속성없이 항상 내 아이 바르를 선언합니다. 밖으로 잘 작동합니다. 그리고 그것을 요약하기 위해 self.yourPropertiesName을 항상 사용하는 이유는 setter와 getter입니다. 그리고 당신이 부르는 다른 어떤 방법과 마찬가지로, 누가 부르는지 말할 필요가 있습니다. 이 답장을 보내 다른 사람이 너무 :

0

, 당신은으로 지정해야합니다

if (!self.pListPath)  
{ 
    NSString *newPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
    newPath = [newPath stringByAppendingPathComponent:@"piggyBanks.plist"]; 
    self.pListPath = newPath; 
} 

그런 다음 나중에, self.pListPath 대신 pListPath 사용합니다.

순간적으로 다시 필요할 때까지 제거 된 자동 반복 문자열에 pListPath이 할당되어 있기 때문에 다시 설정해야합니다. 속성을 설정하면 (속성이 유지되거나 복사 된 경우) 문자열이 유지됩니다.

+0

안녕하세요, 감사합니다 도움이 될 것입니다

희망. 내가 가지고 있는지 확실하지 않습니다. 나는 당신의 방법을 시도했다. (당신은 sth을 섞었다. 4 행에서 = 다음에 newPath가 있어야한다.) 놀랍게도 그것은 작동한다. 하지만 클래스 변수 대신 self.pListPath를 사용하면 객체 변수가 아닌가? 나는'@property (nonatomic, copy) NSString * pListPath;'와 같은 pListPath를 소개했고, 전에'assign'으로 가지고있었습니다. 자기가없는 다른 유형을 사용하는 것을 기억합니다. 클래스 변수로 .. – Nareille

+0

오타를 지적 해 주셔서 고맙습니다. 답변을 업데이트했습니다. 클래스와 객체 변수에 관해서 당신이 의미하는 바가 확실하지 않습니다. 그것들은 객관적으로 사용되는 용어가 아닙니다. 당신은 경로가 _ 인스턴스 변수가되기를 원합니다. 자기 자신을 통해 액세스하십시오. 당신이 변수를 유지하기 때문에 세터에게는 특히 중요한 접근자를 통과한다는 것을 의미합니다. – jrturton

+0

음, 클래스 변수와 객체 변수가있는 것처럼 배웠습니다. Class V.는 특정 클래스의 모든 객체에서 동일하지만 Object Vs. 모든 개체가이 변수를 가지고 있지만 클래스의 모든 개체마다 다릅니다. 클래스 대. 단순히 VARS 이름으로 불리는 반면, Vs. self.varName과 같은 호출, 어쩌면 그건 혼란 스러워요 .. (나는 C++ 배경에서 오는 중이 야,이 objC도 적용 할 것이라고 생각). objC에서 다른 점은 무엇입니까? self.varName이있는 모든 것은 클래스의 모든 객체에 대해 동일하고 varName은 자체가없는 동안 동일합니다. 객체 V와 같습니다.? – Nareille