[绍棠] iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件) 以及 iOS App与iTunes文件传输的方法和对iOS App文件结构的说明

1 篇文章 0 订阅
1 篇文章 0 订阅

就像很多iOS上面的播放器App一样,本文编写一个程序可以通过iTunes往里面放文件,比如编写一个视频播放器程序,通过itune往里面放视频文件,然后通过这个App来播放这个视频。下面是通过iTunes往App传输文件的截图:



实现过程:

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



2。具体代码:

ViewController.h


#import <UIKit/UIKit.h>

//step1. 导入QuickLook库和头文件

#import <QuickLook/QuickLook.h>

//step2. 继承协议  

@interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,QLPreviewControllerDataSource,QLPreviewControllerDelegate,UIDocumentInteractionControllerDelegate>



{

    //step3. 声明显示列表

    UITableView *readTable;

}


//setp4. 声明变量

//UIDocumentInteractionController : 一个文件交互控制器,提供应用程序管理与本地系统中的文件的用户交互的支持

//dirArray : 存储沙盒子里面的所有文件

@property(nonatomic,retain) NSMutableArray *dirArray;

@property (nonatomic, strong) UIDocumentInteractionController *docInteractionController;



@end




ViewController.m

#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];

    

    readTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 64, self.view.frame.size.width, self.view.frame.size.height - 64 -49)];

    readTable.dataSource = self;

    readTable.delegate = self;

    [self.view addSubview:readTable];

    //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

{

    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    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.

}




这个iTunes同步相对来说比较简单, 接下来可以关注我的实现WIFI局域网传输文件到iPhone, 希望对你们有所帮助



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值