2012-02-03 59 views
0

我已經預先填充了除用戶輸入的一個字符串以外的信息。我目前能夠只讀使用此代碼的單個密鑰:Objective-C將數組寫入.plist

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *val; 

    // Get the new value from the textfield 

    val = [myTextField stringValue]; 

    if ([val isEqualToString:defaultValue]) { 
     [defaults removeObjectForKey:myKey]; 
    } else { 
     [defaults setObject:val forKey:myKey]; 
    } 

我真正需要的是寫一個數組像這樣的的.plist:

#define defaultValue @"Someone" 
#define myKey @"Event" 

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *val = [defaults stringForKey:myKey]; 
if (val == nil) val = defaultValue; 
[myTextField setStringValue:val]; 

我這個代碼寫,並且第五個字符串可以是用戶輸入字符串。我該怎麼做呢?:

<plist version="1.0"> 
<dict> 
    <key>Event/key> 
    <dict> 
     <key>Staff Meeting</key> 
     <string>Friday Feb 3rd, 2012 </string> 
     <key>Contact</key> 
     <string>[email protected]</string> 
     <key>URL</key> 
     <string>http://www.whitehouse.gov</string> 
     <key>Status</key> 
     <string>ATTENDING</string> 
     <key>Name</key> 
     <string>Mr. President</string>   <------- USER TEXT INPUT 
     <key>Signature</key> 
     <data> 
     20001 
     </data> 
    </dict> 
</dict> 
</plist> 
+1

可能重複[如何使用我的類具有的plist在Objective-C?(http://stackoverflow.com/questions/9087592/how-to-use-my-class-with-plist- in-objective-c) – Caleb 2012-02-03 18:14:44

+0

@Caleb,我的層次不平坦,是嗎? – user1188152 2012-02-03 18:52:32

+1

那麼?屬性列表可以表示對象的整個圖形。 – Caleb 2012-02-03 19:32:57

回答

0

這裏有一個例子來創建你想要的結構。

-(void)saveData:(NSString*)someParam 
{ 
    NSMutableDictionary *rootObj = [NSMutableDictionary dictionaryWithCapacity:1]; 

    NSDictionary *innerDict; 

    NSString *staffMeetingValue; 
    NSString *contactValue; 
    NSString *nameValue; 

    staffMeetingValue = @"Friday Feb 3rd, 2012"; 
    contactValue = @"[email protected]"; 
    nameValue = someParam; 

    innerDict = [NSDictionary dictionaryWithObjects: 
     [NSArray arrayWithObjects: staffMeetingValue, contactValue, nameValue, nil] 
     forKeys:[NSArray arrayWithObjects:@"Staff Meeting", @"Contact", @"Name"]]; 

    [rootObj setObject:innerDict forKey:@"Event"]; 

    id plist = [NSPropertyListSerialization dataFromPropertyList:(id)rootObj 
     format:NSPropertyListXMLFormat_v1_0 errorDescription:&error]; 
} 

對於其他信息請參見Creating Property Lists Programmatically

希望它能幫助。

P.S.您必須爲其他標籤添加鍵和對象。爲了簡單起見,我跳過了它們。

編輯:

這是一個簡單的例子,如何做到這一點。 staffMeetingValuecontactValue值是硬編碼的,但您可以將它作爲參數傳遞,如nameValue

-(void)saveDataWithName:(NSString*)nameValue staffMeting:(NSString*)staffMetingValue contact:(NSString*)contactValue {  
    // previous stuff here  
}