2012-03-12 45 views
0

我試過這段代碼將我的數據複製到plist,但它在追加.can的情況下不工作。任何一個都可以告訴我一個附加數據的好方法嗎?
NSMutableDictionary * nameDictionary = [NSMutableDictionary dictionary];任何人可以幫助我將數據附加到plist文件?

NSString *plistPath=[[NSBundle mainBundle] pathForResource:@"listNew" ofType:@"plist"]; 
[nameDictionary setValue:nameEntered.text forKey:@"name"]; 
[nameDictionary setValue:company.text forKey:@"company"]; 
[nameDictionary setValue:designation.text forKey:@"designation"]; 

// create dictionary with values in UITextFields 
NSMutableArray *plist = [NSMutableArray arrayWithContentsOfFile:plistPath]; 
if (plist == nil) plist = [NSMutableArray array]; 
[plist addObject:nameDictionary]; 
[plist writeToFile:plistPath atomically:YES]; 
UIAlertView *tellErr = [[UIAlertView alloc] initWithTitle:title message:@"succsefully created" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
[tellErr show]; 
[email protected]""; 
[email protected]""; 
[email protected]""; 
+0

當你說它不工作時,你是否看到崩潰或數組沒有字典,你預計將被添加到最後?從我看到的,你上面的代碼看起來很好。 – Sam 2012-03-12 14:06:16

+0

當我試圖插入它第一次它從plist中刪除整個數據,或者如果我正在查看列表,然後去插入它崩潰 – ashwin19 2012-03-12 14:15:52

+0

如果您的問題得到解答,請將其標記爲綠色支票 – 2012-03-13 12:55:31

回答

0

我會去:

NSString *plistPath=[[NSBundle mainBundle] pathForResource:@"listNew" ofType:@"plist"]; 
NSMutableDictionary *plist = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath]; 
if (plist == nil) plist = [[NSMutableDictionary alloc] init]; 
[plist setObject:nameEntered.text forKey:@"name"]; 
[plist setObject:company.text forKey:@"company"]; 
[plist setObject:designation.text forKey:@"designation"]; 
[plist writeToFile:plistPath atomically:YES]; 

...等...

當然,這取決於正是你想要達到的目標。

+0

但這會覆蓋舊的數據。我想要將新輸入的數據追加到舊數據中 – ashwin19 2012-03-12 14:17:02

+0

這不會覆蓋舊數據。但是,它有一個錯誤,我會在一分鐘左右內解決。 – 2012-03-12 22:31:02

+0

好的,錯誤是固定的。 dictionayWithContentsOfFile分配並初始化字典並將文件內容讀入字典。然後,plist值在字典中。然後添加3個新值,然後將完整的字典寫入相同的文件名。應該做的伎倆。 – 2012-03-12 22:43:16

0

您無法寫入iOS中的應用程序主包。您必須將屬性列表文件複製到可寫目錄;那麼你可以閱讀它,修改它,並重寫它。

+0

你是告訴我從文檔目錄或類似的文件夾中取出plist文件嗎? – ashwin19 2012-03-13 04:25:39

+0

對,上面的代碼段讀取plist,大概預先填充主包中的數據。但是,您不能將修改後的文件版本保存回主包。您必須將其保存到文檔目錄等。出於此原因,應用程序通常會在首次啓動時將需要修改的資源複製到應用程序支持目錄或文檔目錄。 – FluffulousChimp 2012-03-13 10:40:33

0

好的老兄,這裏是你需要的代碼。我用這在現有的iOS程序

第一次檢查,看是否有在字典中的任何信息,開始與

static BOOL dicIsNULL = YES; 

.... 

//initialize the variable 
dicIsNULL = YES; 


//READ FILE 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *stringsPlistPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"listNew.plist"]; 

     dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:stringsPlistPath]; 

     //Check if this dic has values 
     for (id key in dictionary) 
     { 
      //NSLog(@"listNew.plist file has values"); 
      dicIsNULL = NO; 
      break; 
     } 

現在做這取決於已經被創造或不dictonary以下。在字典中添加你的值,這只是一個示例代碼。

if (dicIsNULL == YES) 
     { 
      //NSLog(@"dictionary is NULL"); 

      dictionary = [[NSMutableDictionary alloc] init]; 
      dictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:tempArray, infoKeyStr, textTitleField1.text, titleKeyStr, userSelectedCatStr, catKeyStr, nil]; 

     } 

     if (dicIsNULL == NO) 
     { 
      //NSLog(@"dictionary is NOT null"); 

      dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:stringsPlistPath]; 
      [dictionary setObject: tempArray forKey: infoKeyStr]; 
      [dictionary setObject: textTitleField1.text forKey: titleKeyStr]; 
      [dictionary setObject: userSelectedCatStr forKey: catKeyStr]; 
     } 

希望這可以幫助你。

相關問題