2014-03-12 28 views
0

我想用Plist做一個非常簡單的任務,但我對這一切都很陌生。我在應用程序中有一個變量整數x,並且希望查找PList第一個數組中的整數,並從第二個數組返回相應的字符串。 plist中的文件名是AApropertylist.plist其XML版本是這樣的:非常簡單的查找Xcode 5中的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>number</key> 
<array> 
    <integer>1</integer> 
    <integer>2</integer> 
    <integer>3</integer> 
</array> 
<key>textreturn</key> 
<array> 
    <string>Text of 1</string> 
    <string>Text of 2</string> 
    <string>Text of 3</string> 
</array> 
</dict> 
</plist> 

(這是一個非常刪減版本,兩個陣列上升到45000)

「文本「的1文本」 2「只是佔位符文本,真正的數據仍在編譯中。目標是應用程序將顯示在標籤上的文本結果

我真的很感激一些幫助,我已經到處尋找,但我懷疑解決方案是如此簡單沒有人打擾寫一個教程,我只能找到東西屬於更復雜的Plist結構和表格視圖等。

感謝您的期待!

-Tim

+0

如果你的整數都是獨一無二的,你最好使用一個簡單的字典,如:'1-> 「1的文本」,4 - >「4的文本」,77的「77」的文本。查找速度會更快。 – Cyrille

+0

這看起來簡單得多,但我如何在plist視圖中設置這樣一個plist?根應該是一個字典,每一個新的項目是一個字典?我該如何做查找? – Tim

回答

0
NSObject myPlistContent = [NSDictionary dictionaryWithContentsOfFile:filename]; 

但仔細檢查是否真的有一個NSDictionary您領取。我認爲根目標永遠是一個字典,但我不會在血液中籤字。 該字典可能包含更多字典,數組,字符串,日期,數據和數字,這取決於plist的內容和結構。

0

您應該加載plist中,並將它作爲一個NSDictionary(或陣列) 這裏是一個簡單的代碼,讓你在正確的方向

// path = the path which your plist file is located 
NSString* path = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"plist"]; 


// Break the plist file into an array so we can play with the data 
NSArray* a = [NSArray arrayWithContentsOfFile:path]; 
// now you have the plist as an array (it is called a) 

// next line is a loop which runs on our array (a) and each element is becoming an NSDictionary called d 



for (NSDictionary *d in a) 
{ 

    // just take the value for a single element (d) with the value "number" 
    // store it in a string called cdata 
    NSString *cdate = [d objectForKey:@"number"]; 
    // if this value is equal to "something" do your thing 
    if ([cdate isEqualToString:@"SOMTHING"]) 
    { 

     // do something with text here 
    } 
} 
+0

我有點理解第一點,但後來我迷路了。不幸的是,你正在與一個對此非常陌生的人打交道。 * cdate是否是該標籤的結果?你提到這個代碼是在加載plist作爲一個NSDictionary之後出現的(因爲我不知道該怎麼做)。 「number」是否指代我的代碼中的「number」數組?什麼是字符串「SOMTHING」以及哪裏是對文本數組「textreturn」的引用。對不起,如果這些問題看起來很蠢.. – Tim

+0

再次看我的答案,我添加了評論,讓你更好地理解這一點 - 它比你想象的要簡單得多;) – chewy

+0

這有助於我更接近理解它,「某事」是我的整數x,是嗎? ,但我在哪裏檢索texreturn數組結果?我在這裏看不到它的參考。只是爲了清楚我想比較整數x與數組「數字」的整數,並從數組「文本返回」返回文本。我不知道你的例子中的內容與什麼相符,但它感覺非常接近! – Tim

1

你可以只使用一個字典用數字作爲鍵,它將節省您不得不加載兩個相對較大的數組。你可以做這樣的事情:

<?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>1</key> 
<string>String 1</string> 
<key>2</key> 
<string>String 2</string> 
<key>3</key> 
<string>String 3</string> 
</dict> 
</plist> 

然後加載它簡單地進行:

NSString *path = [[NSBundle mainBundle] pathForResource:@"AApropertylist" ofType:@"plist"]; 
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path]; 

NSString *returnedString = [dict objectForKey:@"ANY_NUMBER"]; 
+0

謝謝,這看起來好像是一個更好的書寫方式。 – Tim

+0

但是我仍然完全失去了如何從鍵中查找值x並返回字符串。當我嘗試這段代碼時,在第二行「使用未聲明的標識符」文件「」中有一個警告,我假定它的意思是讀取「路徑」而不是「文件」來引用上面行中創建的字符串。在第三行中,我認爲* returnedString應該是查找的結果,但我不知道「ANY_NUMBER」是什麼。假設它是從plist中的鍵查找的數字,我用字符串「2」替換了「ANY_NUMBER」,希望.. – Tim

+0

..它將返回* strings作爲「字符串2」的returnedString,但它是null – Tim