Невозможно записать NSArray в файл - PullRequest
0 голосов
/ 14 октября 2011

Я использую данные о контактах Google c API для получения контактов. Я получил массив контактов с сервера Google, теперь я хочу записать контакт в файл. Я использую writeToFile:atomically: метод для записи массива в файл, но этот метод не работает для меня, так как я чувствую, что выходной массив из API gdata не содержит объектов списка свойств. Пожалуйста, предложите любое альтернативное решение.

-(void)fetchData{
    GDataServiceGoogleContact *service=[[GDataServiceGoogleContact alloc] init];
    [service setShouldCacheResponseData:YES];
    [service setServiceShouldFollowNextLinks:YES];
   [service setUserCredentialsWithUsername:[mUsername stringValue] password:[mPassword stringValue]];

    // GENERATING THE URL
    NSURL *feedURL=[GDataServiceGoogleContact contactFeedURLForUserID:kGDataServiceDefaultUser];
    GDataQuery *contQuery=[GDataQueryContact contactQueryWithFeedURL:feedURL];
    [contQuery setShouldShowDeleted:YES];
    [contQuery setMaxResults:2000];
    GDataServiceTicket *ticket=[service fetchFeedWithQuery:contQuery delegate:self didFinishSelector:@selector(hasFetchedContacts:feed:error:)];    
}


-(void) hasFetchedContacts:(GDataServiceTicket*) ticket  feed:(GDataFeedContact*) contacts error:(NSError*) err
{
    NSArray *contactList=[contacts entries];
    NSLog(@"%d",[list writeToFile:@"/Users/subhranil/Desktop/contactList" atomically:NO]);  

}

Ответы [ 3 ]

2 голосов
/ 14 октября 2011

Оберните это до NSData с:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:contactList];

Затем сохраните NSData в файл с:

[data writeToFile:@"/Users/subhranil/Desktop/contactList" atomically:NO];

Позже вы можете восстановить данные обратно в NSArray, используя:

NSData *data = [NSData dataWithContentsOfFile: @"yourFilePath"];
NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]

Просто убедитесь, что объекты внутри вашего NSArray соответствуют NSCoding.

1 голос
/ 03 ноября 2011

Для этой цели можно использовать byte массив и NSData для записи в файл.
Для сохранения:

NSData *data=[[NSData alloc] initWithBytes:[contacts entries] length:total];
[data writeToFile:@"path" atomically:YES];

total = общий размер массива в байтах

Для извлечения:

   NSData *newdata = [NSData dataWithContentsOfFile:@"path"];
   NSUInteger len = [newdata length];
   Byte *byteData = (Byte*)malloc(len);
   memcpy(byteData, [newdata bytes], len);

byteData теперь будет содержать массив объектов GDataEntryContact, и вы можете использовать их соответствующим образом.

0 голосов
/ 21 октября 2011

Вы можете кодировать / декодировать GDataObject, используя xml в качестве генератора.

Код:

[entry setNamespaces:[entry completeNamespaces]];
NSString *xml = [[entry XMLElement] XMLString];
if (nil != xml) 
{
    //Store your xml NSString to a file
}

Декодирование:

NSString *xml = //Read your XML String from file;
NSXMLElement *xmlElement = [[NSXMLElement alloc] initWithXMLString:xml error: &error];
if (!error) {
    return [[GDataEntryDocBase alloc] initWithXMLElement:xmlElement parent: nil];
}
...