Я использую файлы дисков Google в своем приложении. Доступ к файлам, загрузка файлов, загрузка файлов работают как прелесть. Теперь я пытаюсь сохранить информацию GTLDriveFile на локальном (pList), используя NSCoding. Можете ли вы помочь мне, чтобы сохранить эту информацию в Plist или предложить лучший способ сохранить эту информацию в местныхКак сериализовать/десериализовать объект GTLDriveFile в pList
Выполняемые:
- Google Authentication - сделано
- запрашивая файлы - сделать
- Попытка чтобы сохранить всю информацию о файлах в Plist - теперь я здесь
Пожалуйста, обратитесь по ссылке для GTLDriveFile класса STRU cture https://developers.google.com/drive/ios/reference/ios-client/interface_g_t_l_drive_file
Я пробовал таким образом, но я не смог сохранить всю структуру.
Для Ex: .h файл
#import "GTLDriveFile.h"
@interface sample : GTLDriveFile <NSCoding>
@end
файл .m
#import "sample.h"
@implementation sample
//@synthesize File;
- (id)initWithCoder:(NSCoder *)aDecoder
{
if(self = [super init]) {
super.fileSize=[aDecoder decodeObjectForKey:@"fileSize"];
super.originalFilename=[aDecoder decodeObjectForKey:@"originalFilename"];
super.mimeType=[aDecoder decodeObjectForKey:@"mimeType"];
super.title=[aDecoder decodeObjectForKey:@"title"];
**super.parents=[aDecoder decodeObjectForKey:@"parents"];**
super.lastModifyingUserName=[aDecoder decodeObjectForKey:@"lastModifyingUserName"];
**super.copyable=[aDecoder decodeObjectForKey:@"copyable"];**
super.kind=[aDecoder decodeObjectForKey:@"kind"];
super.writersCanShare=[aDecoder decodeObjectForKey:@"writersCanShare"];
**super.appDataContents=[aDecoder decodeObjectForKey:@"appDataContents"];
super.modifiedDate=[aDecoder decodeObjectForKey:@"modifiedDate"];**
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject: super.fileSize forKey:@"fileSize"];
[encoder encodeObject: super.originalFilename forKey:@"originalFilename"];
[encoder encodeObject: super.mimeType forKey:@"mimeType"];
[encoder encodeObject: super.title forKey:@"title"];
**[encoder encodeObject: super.parents forKey:@"parents"];**
[encoder encodeObject: super.lastModifyingUserName forKey:@"lastModifyingUserName"];
**[encoder encodeObject:copyable forKey:@"copyable"];**
[encoder encodeObject: super.kind forKey:@"kind"];
[encoder encodeObject: super.writersCanShare forKey:@"writersCanShare"];
**[encoder encodeObject:appDataContents forKey:@"appDataContents"];**
**[encoder encodeObject: super.modifiedDate forKey:@"modifiedDate"];**
}
@end
Проблема была, я не мог сериализации/десериализации прямые значения, как NSString, NSNumber и т.д. Когда я пытаюсь использовать какой-то базовый объект, например «скопируемый», я получаю исключение (пожалуйста, обратитесь к выделенным жирным объектам или обратитесь к ссылке класса GTLDriveFile из приведенной выше ссылки).
Ребята, пожалуйста, помогите мне сохранить эту информацию на местном уровне и предложите лучший способ сделать это.
Благодаря
Непонятно, в чем ваш вопрос. Что вы пытаетесь кодировать? Покажите этот код. Ни один из кода, который вы показываете, не означает «NSCoding», и что вы ожидаете реализовать? – Wain
Извините. и я следил за механизмом initwithCoder и encodewithcoder .. его работая отлично для NSString и не работает для NSArray @Wain – iTag
- (id) initWithCoder: (NSCoder *) aDecoder { if (self = [super init]) { name = [ aDecoder decodeObjectForKey: @ "name"]; array = [aDecoder decodeObjectForKey: @ "array"]; } return self; } - (void) encodeWithCoder: (NSCoder *) encoder { [encoder encodeObject: name forKey: @ "name"]; [encoder encodeObject: nsarray forKey: @ "nsarray"]; } но как я кодирую и декодирую другой объект класса.? @Wain – iTag