iPhone - кодирует массив данных из объекта CoreData и сохраняет в строке Base64

StackOverflow https://stackoverflow.com/questions/2302718

Вопрос

У меня есть модель данных с тремя объектами (Покупка, Товары, изображение), покупка является основной, а два других - связанными атрибутами.

Мне нужно иметь возможность отправлять данные на веб-сервер, и я должен кодировать в base64, у меня есть пара классов, которые заботятся о кодировании и декодировании, которые я скачал из сети, они являются категориями для класса NSData, но когда я их использую, я получаю обратно нулевую строку.

     // For Error Information
 NSError *error;

 // Create a File Manager
 NSFileManager *fileManager = [NSFileManager defaultManager];

 // Point to the Documents Directory
 NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

 // File we want to create in the Documents Directory
 NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"dataArray.txt"];

 NSString *joined = [self.dataList componentsJoinedByString:@","];

 NSData *myData = [NSData dataWithBase64EncodedString:joined];
 NSLog(@"%@", myData); // THIS IS NULL
 [myData writeToFile:filePath atomically:YES];

ИТАК, массив выдает это...

   <Purchase: 0x502b7a0> (entity: Purchase; id: 0x502a620 <x-coredata://92618241-3890-45FD-B1D7-7F17D52CAF38/Purchase/p22> ; data: {
    amount = 123.56;
    image = 0x502c7b0 <x-coredata://92618241-3890-45FD-B1D7-7F17D52CAF38/Image/p11>;
    items = "<relationship fault: 0x5024900 'items'>";
    latitude = 37.331689;
    longitude = -122.030731;
    name = "Macy's";
    thumbnailImage = "(...not nil..)";
    timestamp = 2010-02-18 18:03:03 -0500;
    type = nil;
}),<Purchase: 0x502bdf0> (entity: Purchase; id: 0x502a630 <x-coredata://92618241-3890-45FD-B1D7-7F17D52CAF38/Purchase/p20> ; data: {
    amount = 12.34;
    image = 0x502c8e0 <x-coredata://92618241-3890-45FD-B1D7-7F17D52CAF38/Image/p9>;
    items = "<relationship fault: 0x502ef40 'items'>";
    latitude = 37.331689;
    longitude = -122.030731;
    name = Rippers;
    thumbnailImage = "(...not nil..)";
    timestamp = 2010-02-18 12:18:34 -0500;
    type = Travel;
}),<Purchase: 0x502c0e0> (entity: Purchase; id: 0x502a640 <x-coredata://92618241-3890-45FD-B1D7-7F17D52CAF38/Purchase/p21> ; data: {
    amount = 5.56;
    image = 0x502ca40 <x-coredata://92618241-3890-45FD-B1D7-7F17D52CAF38/Image/p10>;
    items = "<relationship fault: 0x502f6a0 'items'>";
    latitude = 37.331689;
    longitude = -122.030731;
    name = "Roy Rogers";
    thumbnailImage = "(...not nil..)";
    timestamp = 2010-02-18 17:45:03 -0500;
    type = Clothing;
}),<Purchase: 0x502c320> (entity: Purchase; id: 0x502a650 <x-coredata://92618241-3890-45FD-B1D7-7F17D52CAF38/Purchase/p16> ; data: {
    amount = 5.52;
    image = nil;
    items = "<relationship fault: 0x502f9e0 'items'>";
    latitude = 37.331689;
    longitude = -122.030731;
    name = heariam;
    thumbnailImage = nil;
    timestamp = 2010-02-18 09:41:35 -0500;
    type = nil;
})

Как мне закодировать это в строку base64, чтобы я мог отправить ее по электронной почте на веб-сервер

я очень ценю любую помощь или даже указание в правильном направлении, я все еще очень новичок в программировании.

Это было полезно?

Решение

Выдает ли компоновщик вам предупреждение о том, что "NSData может не отвечать на dataWithBase64EncodedString"?

Если это так, то проблема в том, что ваши категории импортированы неправильно, и метод не существует в том, что касается этого сегмента кода.Убедитесь, что вы импортировали категории в заголовок или реализацию для любого класса, к которому принадлежит приведенный выше код.

Редактировать 01

Я только что заметил, что вы загружаете массив NSManagedObjects .Я не думаю, что NSData может преобразовывать неисполненные управляемые объекты.Вы должны запустить ошибку для всех свойств, включая отношения.

Попробуйте настроить выборку, которую вы используете, чтобы возвращать объекты с ошибками.

[dataListFetch setReturnsObjectsAsFaults:NO]; // or yes, I always get the two reversed.

Когда вы распечатываете неисправный NSManagedObject, связь не выглядит как:

items = "<relationship fault: 0x5024900 'items'>";

Вместо этого он сбрасывает объект / ы на другом конце отношения.Если ваш график очень сложный, вы можете получить очень обширный дамп.

Графики основных данных могут быть очень сложными, и их трудно сериализовать / заархивировать.Действительно, основные данные существуют для обработки графиков, которые не могут быть легко представлены массивами и словарями.

Чтобы сделать график достаточно простым для загрузки, возможно, вам придется создать объекты массива или словаря и заполнить их значениями управляемых объектов.Затем преобразуйте это в данные.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top