iOS发展- 文件共享(使用iTunes导入文件, 并显示现有文件)

到今天实现功能, 由iTunes导入文件的应用程序, 并在此文档进行编辑的应用。

就像我们平时经常使用 PDF阅读这样的事情, 们能够自己导入我们的电子书。

源代码下载:https://github.com/colin1994/iTunesTest.git

以下详细介绍下实现过程。

先看效果图。

图1. 未实现功能前, iTunes截图

图2. 实现功能后, iTunes截图

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGl0d2h5bHo=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />

图3. 实现功能后, 执行截图。

好了, 通过图片, 我们能够看到实现的效果。

功能包括: 同意通过iTunes导入文件。

能够查看沙盒下全部文件。

实现过程:

1。

在应用程序的Info.plist文件里加入UIFileSharingEnabled键,并将键值设置为YES。

2。详细代码:

ViewController.h

//
//  ViewController.h
//  iTunesTest
//
//  Created by Colin on 14-6-8.
//  Copyright (c) 2014年 icephone. All rights reserved.
//

#import <UIKit/UIKit.h>

//step1. 导入QuickLook库和头文件
#import <QuickLook/QuickLook.h>

//step2. 继承协议
@interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,QLPreviewControllerDataSource,QLPreviewControllerDelegate,UIDocumentInteractionControllerDelegate>
{
    //step3. 声明显示列表
    IBOutlet UITableView *readTable;
}

//setp4. 声明变量
//UIDocumentInteractionController : 一个文件交互控制器,提供应用程序管理与本地系统中的文件的用户交互的支持
//dirArray : 存储沙盒子里面的全部文件
@property(nonatomic,retain) NSMutableArray *dirArray;
@property (nonatomic, strong) UIDocumentInteractionController *docInteractionController;
@end

ViewController.m

//
//  ViewController.m
//  iTunesTest
//
//  Created by Colin on 14-6-8.
//  Copyright (c) 2014年 icephone. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize dirArray;
@synthesize docInteractionController;

- (void)viewDidLoad
{
    [super viewDidLoad];

    //step5. 保存一张图片到设备document目录中(为了測试方便)
    UIImage *image = [UIImage imageNamed:@"testPic.jpg"];
    NSData *jpgData = UIImageJPEGRepresentation(image, 0.8);
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory
    NSString *filePath = [documentsPath stringByAppendingPathComponent:@"testPic.jpg"]; //Add the file name
    [jpgData writeToFile:filePath atomically:YES]; //Write the file

    //step5. 保存一份txt文件到设备document目录中(为了測试方便)
    char *saves = "Colin_csdn";
    NSData *data = [[NSData alloc] initWithBytes:saves length:10];
    filePath = [documentsPath stringByAppendingPathComponent:@"colin.txt"];
    [data writeToFile:filePath atomically:YES];

    //step6. 获取沙盒里全部文件
	NSFileManager *fileManager = [NSFileManager defaultManager];
	//在这里获取应用程序Documents目录里的文件及目录列表
	NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
	NSString *documentDir = [documentPaths objectAtIndex:0];
	NSError *error = nil;
	NSArray *fileList = [[NSArray alloc] init];
	//fileList便是包括有该目录下全部文件的文件名称及目录名的数组
	fileList = [fileManager contentsOfDirectoryAtPath:documentDir error:&error];

	self.dirArray = [[NSMutableArray alloc] init];
	for (NSString *file in fileList)
	{
		[self.dirArray addObject:file];
	}

	//step6. 刷新列表, 显示数据
	[readTable reloadData];
}

//step7. 利用url路径打开UIDocumentInteractionController
- (void)setupDocumentControllerWithURL:(NSURL *)url
{
    if (self.docInteractionController == nil)
    {
        self.docInteractionController = [UIDocumentInteractionController interactionControllerWithURL:url];
        self.docInteractionController.delegate = self;
    }
    else
    {
        self.docInteractionController.URL = url;
    }
}

#pragma mark- 列表操作
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
	return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
	static NSString *CellName = @"CellName";
	UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellName];
	if (cell == nil)
	{
		cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellName];
		cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
	}

	NSURL *fileURL= nil;
	NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
	NSString *documentDir = [documentPaths objectAtIndex:0];
	NSString *path = [documentDir stringByAppendingPathComponent:[self.dirArray objectAtIndex:indexPath.row]];
	fileURL = [NSURL fileURLWithPath:path];

	[self setupDocumentControllerWithURL:fileURL];
	cell.textLabel.text = [self.dirArray objectAtIndex:indexPath.row];
	NSInteger iconCount = [self.docInteractionController.icons count];
    if (iconCount > 0)
    {
        cell.imageView.image = [self.docInteractionController.icons objectAtIndex:iconCount - 1];
    }

	return cell;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
	return [self.dirArray count];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
	QLPreviewController *previewController = [[QLPreviewController alloc] init];
    previewController.dataSource = self;
    previewController.delegate = self;

    // start previewing the document at the current section index
    previewController.currentPreviewItemIndex = indexPath.row;
    [[self navigationController] pushViewController:previewController animated:YES];
    //	[self presentViewController:previewController animated:YES completion:nil];
}

#pragma mark - UIDocumentInteractionControllerDelegate

- (NSString *)applicationDocumentsDirectory
{
	return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}

- (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)interactionController
{
    return self;
}

#pragma mark - QLPreviewControllerDataSource

// Returns the number of items that the preview controller should preview
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)previewController
{
	return 1;
}

- (void)previewControllerDidDismiss:(QLPreviewController *)controller
{
    // if the preview dismissed (done button touched), use this method to post-process previews
}

// returns the item that the preview controller should preview
- (id)previewController:(QLPreviewController *)previewController previewItemAtIndex:(NSInteger)idx
{
    NSURL *fileURL = nil;
    NSIndexPath *selectedIndexPath = [readTable indexPathForSelectedRow];
	NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
	NSString *documentDir = [documentPaths objectAtIndex:0];
	NSString *path = [documentDir stringByAppendingPathComponent:[self.dirArray objectAtIndex:selectedIndexPath.row]];
	fileURL = [NSURL fileURLWithPath:path];
    return fileURL;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-10-09 22:32:37

iOS发展- 文件共享(使用iTunes导入文件, 并显示现有文件)的相关文章

iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件)

今天要实现一个功能, 通过iTunes导入文件到应用中, 并且在应用中对这个文件进行编辑. 类似我们平时经常使用的 PDF阅读器那样的东西, 我们可以自己导入我们的电子书. 源码下载:https://github.com/colin1994/iTunesTest.git 下面具体介绍下实现过程. 先看效果图. 图1. 未实现功能前, iTunes截图 图2. 实现功能后, iTunes截图 图3. 实现功能后, 运行截图. 好了, 通过图片, 我们可以看到实现的效果. 功能包括: 允许通过iTu

vs2015中将复制过来的文件夹显示目录文件

先将文件夹和文件复制到VS程序所在的位置,点击解决方案资源管理器上的"显示所有文件"按纽,展开这个文件夹,这样你就可以看到这个文件或者文件夹了,这时,这个文件或者文件夹是虚线构成的.你右击这个文件或者文件夹,选择"包含在项目中",就将它们包含到项目中来了.

慧自文档:代替 Everything 来快速查找文件的,实现文件显示在文件夹的层次结构中

1. 搜索功能和Everything一样快和强大      具有 Everything 搜索快.搜索功能强等优点,      解决了不能方便选择搜索哪个文件夹,      解决了不能同一个画面进行预览等问题   2.文件直接显示到文件夹的层次结构中     非常直观,很有利于快速找文档   3. 很方便就可以指定要搜索的文件夹      因为集成了"Windows资源管理器"放在"目录栏"   4. 同一个画面的快速预览.嵌入预览        更方便排查以找到目标

VC6在win7环境下无法添加以及打开现有文件的解决办法

在VC6.0中使用键盘快捷键或者是文件菜单打开现有文件以及添加文件出现编辑器停止响应,弹出内容为Microsoft(R) Developer Studio已停止工作 Windows正在检查解决该问题的解决方案, 在我的机器上是这样解决的, 添加插件 1.使用附件中的FileTool.exe filetool.rar 2.双击运行,选择unzip,解压至自定义的目录下面 3.启动VC6.0,打开解压后的工程文件,build编译后,会在目录下生成 FileTool.dll文件. 4.重新启动VC6.

【iOS越狱开发】如何将应用打包成.ipa文件

在项目开发中,我们常常需要将工程文件打包成.ipa文件,提供给越狱的iphone安装. 下面是一种方法: 1.首先应该给工程安装好配置文件(这里不再敖述),在ios device的状态下,运行成功. 2.选择Product->archive,如下图3.点击Distribute按钮,弹出新窗口,选择Export as Xcode Archive,如下: 4.弹出是否保存,点击save.5.选择生成的文件,xxx 13-5-10 下午4.00.xcarchive,右键点击,选择Show Packag

【iOS越狱开发】怎样将应用打包成.ipa文件

在项目开发中.我们经常须要将project文件打包成.ipa文件.提供给越狱的iphone安装. 以下是一种方法: 1.首先应该给project安装好配置文件(这里不再敖述),在ios device的状态下.执行成功. 2.选择Product->archive,例如以下图 3.点击Distributebutton,弹出新窗体,选择Export as Xcode Archive,例如以下: 4.弹出是否保存,点击save. 5.选择生成的文件,xxx 13-5-10 下午4.00.xcarchiv

iOS - Scenekit3D引擎初探之 - 导入模型+上传服务器+下载并简单设置

SceneKit是ios8之后苹果推出了一个3D模型渲染框架. SceneKit现在可以支持有限的几种模型,截止到我写这篇文章为止似乎只有.dae和.abc后一种模型我没有使用过.这篇文章只针对.dae模型写. 首先如果是希望加载一个已有的,不需要程序在运行的时候动态添加的dae模型.那么我们可以直接新建一个game类型的工程.在选项中选择SceneKit,在程序中加载自带模型的那句话中将模型名称替换即可.本文主要讲一下如何导出dae模型,并在server端动态下载并显示. 首先我们手中有一个.

iOS 创建文件夹,删除文件夹,对文件夹重命名的操作

iOS 创建文件夹,删除文件夹,对文件夹重命名的操作 by 伍雪颖 + (void)createFolder:(NSString *)folderName { NSString *imageDir = [NSString stringWithFormat:@"%@/Documents/%@", NSHomeDirectory(),folderName]; NSLog(@"HomeDir: %@",imageDir); BOOL isDir = NO; NSFileM

atitit.sql server2008导出导入数据库大的表格文件... oracle mysql

atitit.sql server2008导出导入数据库大的表格文件... 1. 超过80M的文件是不能在查询分析器中执行的 1 2. Oracle ,mysql大的文件导入 1 2.1. 使用sql文件 1 2.2. 使用dmp二进制文件(oracle only) 1 2.3. Other 导出txt,excel在导入( 不推荐),常常不能导入 1 3. 本机导入 1 4. 远程导入 2 5. syaolon msg 2 6. 参考 3 1. 超过80M的文件是不能在查询分析器中执行的 imE