2014-06-09 131 views
1

我正在嘗試將核心數據的數據寫入xml文件。將核心數據寫入XML文件

什麼是最好的方法?使用可以提供數據的陣列控制器?

或嘗試使用NSFetchRequest?我嘗試了最後一次,但我認爲NSFecthRequest的輸出不能寫入xml文件。

我用這個代碼:

NSManagedObjectContext *moc = [self managedObjectContext]; 
    NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"LanguageEntity" inManagedObjectContext:moc]; 
    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    [request setEntity:entityDescription]; 
    [request setReturnsObjectsAsFaults:NO]; 

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"1==1"]; 
    [request setPredicate:predicate]; 

    NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"language" ascending:YES]; 

    request.sortDescriptors = [NSArray arrayWithObject:descriptor]; 

    NSError *error; 
    NSArray *array = [moc executeFetchRequest:request error:&error]; 
    NSLog(@"%@", array); 
    if (array == nil) 
    { 
     NSLog(@"error"); 
    } 
    else 
    { 
     NSString *root = @"/Users/Sebastian/Desktop/A6/A6/newPlist.xml"; 
     if (![[NSFileManager defaultManager]fileExistsAtPath:root])//checking fileexist or not 
     { 
      //if not exist creating the same 
      [[NSFileManager defaultManager]createFileAtPath:root contents:nil attributes:nil]; 
      [[moc executeFetchRequest:request error:&error] writeToFile:root atomically:YES]; 
     } 
     else 
     { 
      [[moc executeFetchRequest:request error:&error] writeToFile:root atomically:YES]; 
     } 

    } 

這是主要的正確方法?或者我應該使用ArrayController?如果是的話,你可以告訴我怎麼做?

後來我希望能夠將核心數據內容保存到xml文件並加載其他xml或特定的東西。

親切的問候

回答

1

你如何獲得數據真的是無關緊要的。您的問題是將數據轉換爲可導出到XML的表單,以及如何處理該數據。

使用:

[[moc executeFetchRequest:request error:&error] writeToFile:root atomically:YES]; 

(首先您要重新執行抓取您已經執行)你想直接將管理對象的數組到XML(中的plist格式)。這不一定會奏效,因爲plist有一組非常特定的允許數據類型,而管理對象不是其中之一。

您可以更改提取返回字典(NSDictionaryResultType),這會讓你更接近。但是,您獲取的數據中的任何日期仍然會導致失敗。如果您有任何數據類型無法存儲到plist中,則在嘗試轉換數組之前,您需要執行到另一種數據類型的轉換。

+0

Wain?你拯救了我的一天。我實際上是在尋找像setResultType這樣的東西!如果我在那裏設置NSDictionaryResultType並將其保存在xml文件中,一切都完成了。 – Bolic