2013-10-02 4 views
1

Im пытается научиться сохранять/загружать изображения, и я просто не понимаю, почему это не работает. Im писать скриншот к файловой системе, как это:Письмо/загрузка в/из файла

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) 
    UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, [UIScreen mainScreen].scale); 
else 
    UIGraphicsBeginImageContext(self.view.bounds.size); 

[self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
NSData * data = UIImagePNGRepresentation(image); 

NSArray *directories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [directories objectAtIndex:0]; 
NSString *key = [documentsDirectory stringByAppendingPathComponent:@"screenshots.archive"]; 

[data writeToFile:key atomically:YES]; 

И в "INIT" medthod в моем UITableView подкласса, я это сделать:

pics = [[NSMutableDictionary alloc]initWithContentsOfFile:[self dataFilePath]]; 

метод путь_файла_данных:

- (NSString *)dataFilePath 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    return [documentsDirectory stringByAppendingPathComponent:@"screenshots.archive"]; 
} 

Чтобы проверить, работает ли это, у меня есть этот метод делегирования:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 

    return pics.count; 
} 

Я тестирую его, снимая скриншот и инициализируя свой подкласс UITableview, но он не показывает строк. Что я делаю не так?

+0

ОК, пройдите через него с помощью отладчика и проверьте, что каждый объект инициализируется, как вы ожидаете. С этим AFAICT не так уж плохо. – trojanfoe

+1

Проверьте конец вашего скриншота – HereTrix

ответ

2

Есть несколько ключевых проблем с кодом, которые заставляют его не работать. Вы храните данные изображения непосредственно в файл и пытаетесь прочитать его в качестве словаря. Сначала вы захотите сначала обернуть изображение в массив и записать массив в файл. Затем вы захотите прочитать файл в массив для отображаемой таблицы. Подводя итог изменений:

Изменить

[data writeToFile:key atomically:YES]; 

в

NSMutableArray *storageArray = [NSMutableArray arrayWithContentsOfFile:key]; 

if(!storageArray) 
    storageArray = [NSMutableArray arrayWithObject:data]; 
else 
    [storageArray addObject:data]; 

[storageArray writeToFile:key atomically:YES]; 

и изменить

pics = [[NSMutableDictionary alloc]initWithContentsOfFile:[self dataFilePath]]; 

в

pics = [[NSArray alloc] initWithContentsOfFile:[self dataFilePath]]; 
+0

perfect - thanks! – Anders

Смежные вопросы