1

我们正在尝试对两个应用程序使用应用程序间通信,并尝试将文件路径从一个应用程序发送到另一个应用程序,问题是如果我通过发送方应用程序将任何文本传递给接收方,那么它运行良好,但如果我尝试通过文件文档路径然后它在这里不起作用是我的发件人代码

-(IBAction) openReceiverApp:(id)sender {
// Opens the Receiver app if installed, otherwise displays an error

UIApplication *ourApplication = [UIApplication sharedApplication];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, @"ads.rtf"];
NSLog(@"filePath %@", filePath);
//  NSString *URLEncodedText = [self.textBox.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
 NSString *URLEncodedText = [filePath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *ourPath = [@"readtext://" stringByAppendingString:URLEncodedText];

NSLog(@"%@",ourPath);

NSURL *ourURL = [NSURL URLWithString:ourPath];
if ([ourApplication canOpenURL:ourURL]) {
    [ourApplication openURL:ourURL];
}
else {
    //Display error
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Receiver Not Found" message:@"The Receiver App is not installed. It must be installed to send text." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alertView show];
}

在接收方我写了这段代码

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
// Display text
UIAlertView *alertView;
NSString *text = [[url host]stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
alertView = [[UIAlertView alloc] initWithTitle:@"Text" message:text delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];

return YES;

我哪里错了??提前致谢....

4

3 回答 3

3

关键词是沙盒。在 iOS 上,每个应用程序都是沙盒化的,这意味着它在自己的容器中运行,并且应用程序存储的所有数据都应该受到保护,以防止其他应用程序被操纵(读取和写入)。

设备未越狱时,无法访问其他应用的 Documents 文件夹。

于 2013-10-05T09:02:10.283 回答
1

我不确定你是否成功了。但我想分享这个可能有用的信息。Apple 在 iOS8 中发布了一个新的 api,用于访问应用程序沙箱之外的文档。

文档选择器 文档选择器视图控制器 (UIDocumentPickerViewController) 允许用户访问应用程序沙箱之外的文件。这是一种在应用程序之间共享文档的简单机制。它还支持更复杂的工作流程,因为用户可以使用多个应用程序编辑单个文档。

文档选择器允许您访问来自多个文档提供者的文件。例如,iCloud 文档提供程序授予对存储在另一个应用程序的 iCloud 容器中的文档的访问权限。第三方开发者可以使用 Storage Provider 扩展提供额外的文档提供者。

有关详细信息,请参阅文档选择器编程指南。(https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/DocumentPickerProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40014451

于 2014-11-30T00:50:48.157 回答
0

我认为有一种叫做钥匙串访问组的东西可以做你想做的事。我从未使用过它,所以我不确定。阅读并确定它是否适合您。我看到的一些评论表明很难可靠地设置和测试。

您需要担心如果在安装两个应用程序后需要在用户设备上更新钥匙串访问权限会发生什么。如何更新它们以使他们继续共享对彼此文件的访问权限?

于 2013-10-06T02:56:31.833 回答