2014-12-23 2 views
0

Один из разработчиков реализует проект phonegap, поддерживающий кросс-платформу (ios & android). Все происходит странно, если для iOS нет плагина. Я исчерпал требование, которое появилось, мы сохраняем pdf-файлы, созданные в каталоге приложений в документах. В android, когда щелкнут файл, открывается файловый проводник для выбора файла из нужного места. Я должен был написать настраиваемый плагин для ios, поскольку вещи изолированы в ios ... только так, как пользователь может выбрать файлы, сохраненные в каталоге документов приложения. Я пытаюсь извлечь документы (pdf-файлы) из каталога и заполнить их в виде таблицы. Фактически я последовал за этим link в репозитории Git для сохранения PDF-файла. Ссылка следует традиционному способу сохранения в каталоге документов, но я не вижу, чтобы файл был сохранен с расширением «.pdf», что удивительно, что файлы PDF видны с расширениями в каталоге temp, встроенными в уникальные папки. Кроме того, он вытирает файл из каталога документов после того, как пользователь открывает файл в соответствующем считывателе s/w.Невозможно правильно хранить/извлекать файлы из NSDocumentsDirectory

Когда я попытался извлечь файлы из временного каталога, используя следующий код:

NSString *docPath = NSTemporaryDirectory(); 
self.filesArray = [[[NSFileManager defaultManager] contentsOfDirectoryAtPath:docPath error:NULL] mutableCopy]; 
    for (NSString *file in _filesArray) { 
     NSString *actualFile = [NSString stringWithFormat:@"/%@",file]; 
     docPath = [docPath stringByAppendingString:actualFile]; 
    } 
[_filePathsArray addObject:docPath]; 

Как и следовало ожидать его возвращения только каталоги (я имею в виду папки) .... и файлы PDF скрыты в тех подкаталоги. Мне нужно извлечь эти файлы и показать их в виде таблицы. Вот пример кода плагина, который я создал:

- (NSMutableDictionary *)callbackIds { 
    if (_callbackIds == nil) { 
     _callbackIds = [[NSMutableDictionary alloc] init]; 
    } 
    return _callbackIds; 
} 

-(void)open:(CDVInvokedUrlCommand *)command 
{ 
    [self.callbackIds setValue:command.callbackId forKey:@"open"]; 

    CGFloat width = [UIScreen mainScreen].bounds.size.width; 
    CGFloat height = [UIScreen mainScreen].bounds.size.height; 
    self.listOfFiles = [[UITableView alloc] initWithFrame:CGRectMake(230, 210, width/1.8, height/1.8) style:UITableViewStylePlain]; 
    self.listOfFiles.dataSource = self; 
    self.listOfFiles.delegate = self; 
    self.listOfFiles.scrollEnabled = YES; 
    self.listOfFiles.rowHeight = tableHeight; 

    [self.viewController.view addSubview:_listOfFiles]; 
} 

#pragma mark - TableViewDataSource 

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    self.filePathsArray = [[NSMutableArray alloc]init]; 
    self.filesArray = [[NSMutableArray alloc]init]; 
    NSString *docPath = NSTemporaryDirectory(); 
    self.filesArray = [[[NSFileManager defaultManager] contentsOfDirectoryAtPath:docPath error:NULL] mutableCopy]; 
    for (NSString *file in _filesArray) { 
     NSString *actualFile = [NSString stringWithFormat:@"/%@",file]; 
     docPath = [docPath stringByAppendingString:actualFile]; 
    } 
    [_filePathsArray addObject:docPath]; 

    return _filesArray.count; 
} 

#pragma mark - TableViewDelegate 

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *cellIdentifier = [NSString stringWithFormat:@"S%1dR%1d",indexPath.section,indexPath.row]; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
    } 
    cell.textLabel.text = [_filesArray objectAtIndex:indexPath.row]; 
    return cell; 
} 

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
    // Send result back to the javascript plugin 
    NSString *resultingPath = [self.filePathsArray objectAtIndex:indexPath.row]; 
    [self returnPluginResult:resultingPath toCallback:@"open" withError:NO]; 
    [_listOfFiles removeFromSuperview]; 
} 

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{ 
    return @"Choose File"; 
} 

#pragma mark - Plugin Callback 

- (void)returnPluginResult:(NSString *)result toCallback:(NSString *)callback withError:(BOOL)error 
{ 
    CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:result]; 
    if (!error) { 
     [self writeJavascript:[pluginResult toSuccessCallbackString:[self.callbackIds valueForKey:callback]]]; 
    } 
    else { 
     [self writeJavascript:[pluginResult toErrorCallbackString:[self.callbackIds valueForKey:callback]]]; 
    } 
} 

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

Спасибо всего заранее :)

ответ

0

link Я последовал за хранение Ф фактически удаление файла из каталога документов при хранении. Усечение кода удаления решило проблему для меня. Надеюсь, это поможет кому-то, спасибо :)