Один из разработчиков реализует проект 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]]];
}
}
Кто-нибудь, пожалуйста, назовите меня решением или последующими полезными ссылками. Я пробовал каждый образец кода над громоздким поисковым роботом, и ничто, казалось, не решило мою проблему.
Спасибо всего заранее :)