2014-10-20 3 views
0

Я использовал этот ответ, чтобы преобразовать UIImage в NSSstring,закодированной строки из UIImage возвращают нуль

https://stackoverflow.com/a/11251478/3741799

кодировать

- (NSString *)encodeToBase64String:(UIImage *)image { 
return [UIImagePNGRepresentation(image) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; 
} 

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

- (UIImage *)decodeBase64ToImage:(NSString *)strEncodeData { 
    NSData *data = [[NSData alloc]initWithBase64EncodedString:strEncodeData options:NSDataBase64DecodingIgnoreUnknownCharacters]; 
    return [UIImage imageWithData:data]; 
} 

здесь закодировать изображение и поместите NSString в класс NSObject

self.newData.imageString = [self encodeToBase64String: image]; 

добавить новый объект в Tableview

- (Void) insertNewObject: (id) sender { 
     
     if (! self.objects) { 
    
         [self.objects addObject: self.newData.imageString]; 
       
         [self.tableView reloadData]; 
     } 
   

     [self.objects InsertObject: self.newData atIndex: 0]; 
     NSIndexPath * indexPath = [NSIndexPath indexPathForRow: 0 inSection: 0]; 
     [self.tableView insertRowsAtIndexPaths: @ [indexPath] withRowAnimation: UITableViewRowAnimationAutomatic]; 
     

} 

затем загрузить новый объект в TableView!

- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath { 

     static NSString * CellIdentifier = @ "Custom"; 
     CustomCell * cell = (CustomCell *) [self.tableView dequeueReusableCellWithIdentifier: CellIdentifier forIndexPath: indexPath]; 
     ObjectClass * object = [self.objects objectAtIndex: indexPath.row]; 
   
         cell.imageView.image = [self decodeBase64ToImage: object.imageString]; 

     return cell; 
} 

Но когда я загрузить изображение в ячейке не может декодировать строку, поскольку она имеет нулевое значение, и сбой приложения!

* Нагрузочное приложение из-за неперехваченное исключение 'NSInvalidArgumentException', причина: '* - [_ NSPlaceholderData initWithBase64EncodedString: опции]: ноль аргумента строки'

Я думаю, что проблема заключается в кодировка, но я не могу решить ее самостоятельно!

Где я ошибаюсь?

благодаря

ВОПРОС UPDATE

Zaph вопрос правильно, я пытаюсь объяснить лучше: У меня есть пустой вид таблицы, пользователь добавляет изображение и текстовую строку для каждого ряд. Так что я попытался использовать это руководство официальный Apple,

https://developer.apple.com/library/ios/referencelibrary/GettingStarted/RoadMapiOS/ThirdTutorial.html

В классе XYZToDoItem добавьте свойство @property NSString * ITEMNAME; и я могу легко добавить текстовую строку, созданную пользователем. Но как я могу добавить изображения в этом классе? Так что я решил преобразовать изображения в строки и добавить свойство @property NSString * imageString; Но что-то не так, и я не могу этого сделать! Можете ли вы предложить лучший способ сделать это?

Большое вам спасибо за вашу поддержку и помощь!

+2

Почему вы конвертируете 'NSData' в кодировку Base64 NSString и обратно? Что вы пытаетесь выполнить с помощью этой кодировки/декодирования? – zaph

+0

в 'cellForRowAtIndexPath:' '' self.objects' существуют? В вашем методе 'insertNewObject:' у вас есть if, который проверяет, является ли self.objects nil 'if (! Self.objects) {', и если это так, он вызывает 'addObject:' на этом nil. Наверное, вы сначала хотели создать 'self.objects', а затем вызвать' addObject: '. –

+0

Спасибо, Заф, я уточню вопрос !! – Ragazzetto

ответ

1

Код внутри условного

if (! self.objects) { // true for self.objects == nil 

    [self.objects addObject: self.newData.imageString]; 

    [self.tableView reloadData]; 
} 

будет выполняться только тогда, когда self.objects является nil.Так self.tableView reloadData вызывается, когда self.objects не существует, то есть

ObjectClass * object = [self.objects objectAtIndex: indexPath.row]; // object is nil 

присвоит object к nil.

Затем последующий вызов decodeBase64ToImage не будет выполнен, потому что object.imageString является nil.