iPhone Plist의 배열
-
13-09-2019 - |
문제
여기서 답변에 제안 된대로 Plist에서 배열을 얻으려고 노력하고 있지만 작동하지 않습니다. 누군가 내가 무엇을 놓치고 있는지 말해 줄 수 있습니까?
여기에 plist가 어떻게 생겼는지 .... 또 다른 이상한 점은 이것을 평범한 텍스트 파일로 열 수 없다는 것입니다. 내가 할 때 쓰레기처럼 보이지만 속성 목록 편집기에서는 괜찮아 보입니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>count</key>
<array>
<integer>5</integer>
</array>
<key>username</key>
<array>
<string>johnsmith</string>
</array>
</dict>
</plist>
다음은 제가 사용하고있는 코드입니다 ..... Dictionary는 nsmutabledictionary이고 AccountsArray는 .h 파일에있는 nsmustablearray입니다.
NSMutableDictionary *tempDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath];
dictionary = tempDictionary;
[tempDictionary release];
NSMutableArray *nameArray = [[NSMutableArray alloc] init];
nameArray = [dictionary objectForKey:@"username"];
accountsArray = nameArray;
[nameArray release];
내가 뭔가를 놓치고 있습니까? 뭔가를 망치고?
감사...
해결책 2
마침내 다음과 같이 작동했습니다.
dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath];
if (accountsArray == nil){
accountsArray = [[NSMutableArray alloc]init];
}
if (countArray == nil){
countArray = [[NSMutableArray alloc]init];
}
countArray = [dictionary objectForKey:@"count"];
accountsArray = [dictionary objectForKey:@"username"];
다른 팁
글쎄, 많은 문제가 있습니다. 우선 PLIST는 아마도 이진 속성 목록 일 것입니다. 실제로 XML 속성 목록이 아닙니다. 이것은 코드 측면에서 크게 중요하지 않지만 일반 텍스트를 여는 문제를 설명하는 데 도움이되어야합니다.
둘째, 출시함으로써 tempDictionary
, 당신은 또한 공개하고 있습니다 dictionary
, 둘 다 같은 물체를 가리키기 때문에. 코드가 작동하지 않는 이유를 설명하는 데 도움이됩니다. 노력하다 autorelease
, 또는 간단히 dictionaryWithContentsOfFile:
그리고 릴리스 문구는 alltogether입니다. (dictionaryWithContentsOfFile:
반환 값을 자동 조절합니다.)
또한 두 번째 문구에서 릴리스 실수를 반복합니다. 과제 연산자 (=
) Objective-C에서 복사하지 않습니다. 그것 할당.
편집 : 속성 표기법을 사용할 때 후자는 사실이 아닙니다. 속성이 정의된다고 가정합니다. self.accountsArray = nameArray
배열을 객체에 (아마도) 복사 할 것입니다.
Reedit : 올바른 코드 :
dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath];
accountsArray = [dictionary objectForKey:@"username"];