2012-05-20 103 views
-1

我正在爲越獄手機開發應用程序。我是Obj-c的新手。我想:編輯.plist文件

  1. 讀取/ var /移動/庫/首選項[特別com.apple.assistant.plist] plist文件中(越獄,還記得嗎?)

  2. 更改爲字符串鍵,「主機名」。

  3. 保存plist文件。

然後我打算把代碼放在一個IBAction中,並將它鏈接到IB中的一個按鈕。

有誰知道如何做到這一點?你可以發佈代碼嗎?

+4

你有什麼試過?這包括[閱讀文檔](https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/PropertyLists/Introduction/Introduction.html#//apple_ref/doc/uid/10000048i)? –

回答

3

我假設你主要想知道如何讀/寫plist。下面是這樣做的一個例子:

NSString* filename = @"/var/mobile/Library/Preferences/com.apple.assistant.plist"; 
NSMutableDictionary* prefs = [[NSMutableDictionary alloc] initWithContentsOfFile: filename]; 
NSString* hostnamePref = (NSString*)[prefs valueForKey: @"Hostname"]; 
NSLog(@"current hostname is %@", hostnamePref); 

[prefs setValue: @"Some New Value Here" forKey: @"Hostname"]; 

[prefs writeToFile: filename atomically: YES]; 
[prefs release]; // not needed if you use Automatic Reference Counting in your project 

編輯:如果你的字典(的plist)實際上是字典的字典,你可能會使用這樣的:

NSMutableDictionary* prefs = [[NSMutableDictionary alloc] initWithContentsOfFile: filename]; 
NSString* nestedKeyname = @"124-37HGSH-CF12-67TY"; 
NSMutableDictionary* nestedPrefs = (NSMutableDictionary*)[prefs valueForKey: nestedKeyname]; 
NSString* hostnamePref = (NSString*)[nestedPrefs valueForKey: @"Hostname"]; 
NSLog(@"current hostname is %@", hostnamePref); 

[nestedPrefs setValue: @"Some New Value Here" forKey: @"Hostname"]; 
[prefs setValue: nestedPrefs forKey: nestedKeyname]; 

上面的代碼應該工作對於用戶移動有權讀取和寫入的任何路徑。

+0

它工作,很好。我必須改變字典爲首選項。但是它創建的關鍵主機名不會被編輯。然後我發現它在字典裏面的字典中。內部字典被稱爲124-37HGSH-CF12-67TY。我如何調整你的代碼來做到這一點? – user1405727

+0

@ user1405727,抱歉關於錯字(固定在編輯中)。我現在不在我的Mac上,所以我添加的附加代碼也沒有經過編譯器測試。我回家後會檢查它。但是,基本的想法應該告訴你如何鑽入嵌套字典。另外,如果您對plist文件的內容不清楚,可以從Cydia安裝'plutil',或使用ssh並將plist文件複製回Mac,然後使用Mac的Property List Editor打開它。這會在你花費太多時間試圖用代碼發現內容之前澄清plist結構。祝你好運。 – Nate

+0

@ user1405727,如果您在上面的問題中添加了關於plist文件內容的更多細節,也可以提供幫助。該文件並不存在於每個人的設備上,而未越獄的開發人員將無法輕鬆檢查文件系統......但您的基本問題是關於閱讀和保存plists,這不僅是一個問題越獄發展。只是試圖幫助你得到你的問題的最佳答案。 – Nate