8

在谷歌搜索并搜索了一段时间后,我仍然找不到答案 -

我想知道,如何使用自定义 URL 处理程序在我的两个应用程序之间传输数据?特别是图像或 NSData 对象。

我知道能够使用自定义处理程序打开我的应用程序的特定部分,例如 myapp1://start , myapp2://start ,但我不知道如何通过这些继续传输大量数据(~80k)处理程序。

很想听听任何创造性的解决方案:)

ps解决方案应该是 iOS >= 4.3 Compatible

4

5 回答 5

11

将自定义 URL 处理程序与 UIPasteboard 结合使用。将您的第一个应用程序(例如图像)中的某些内容保存到通用粘贴板,如下所示:

UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
[[UIPasteboard generalPasteboard] setImage:myImage];

然后使用自定义 URL 方案来切换应用程序。

然后在需要时从新应用程序中检索您的图像:

   UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
   UIImage *tempImg = pasteboard.image;

实战考验。; )

于 2012-09-08T23:01:47.000 回答
3

一种解决方案可能是:

  • 实现一个网络服务器
  • 通过自定义 url 方案打开您的第二个应用程序,其中 IP 地址和自定义 Web 服务器的端口包含在 url 中
  • 将路由或参数添加到您的图像也添加到您的 URL

下载并欣赏您的照片 :-)

另一个解决方案:

  • 启动 Bonjour 服务
  • 在网络中,第二个应用程序可以找到此服务
  • 做一些魔术来在应用程序之间传递数据

编辑:更好的其他解决方案:

刚刚找到了另一种更有效的方式来交换更大的数据集:
它被称为UIPasteboard

最佳参考:http:
//developer.apple.com/library/ios/#documentation/UIKit/Reference/UIPasteboard_Class/Reference.html

还有另一个资源: http:
//kmithi.blogspot.in/2012/03/sharing-data-among-ios-applications.html

那应该这样做。对于网络服务器:使用 Google 找到了大量的实现

于 2012-09-08T14:03:48.587 回答
1
     [http://www.codeproject.com/Articles/43447/How-to-Use-UIPasteBoard-to-Implement-Custom-Copy-a][1]

        As you know many of the controls in UIKit now come pre-loaded with the ability to copy and paste text. You can also use this new ability in your own apps to copy and paste other things including: images, SQLite databases, text or any file. This is a great way to share data between your apps if you want to provide users with a suite of apps with integrated functionality.



     CopyFrom Source Code
        -(IBAction)copyImageToPasteBoard{
            UIPasteboard *appPasteBoard = [UIPasteboard pasteboardWithName:@"CopyFrom" 
                     create:YES];
            appPasteBoard.persistent = YES;

            NSData *data = UIImagePNGRepresentation([UIImage imageNamed:@"Old-Time-Photo.jpg"]);
            [appPasteBoard setData:data forPasteboardType:@"com.appshop.copyfrom.imagedata"];
        }

        -(IBAction)copyStringToPasteBoard{
            UIPasteboard *appPasteBoard = [UIPasteboard pasteboardWithName:@"CopyFrom" 
                     create:YES];
            appPasteBoard.persistent = YES;
            [appPasteBoard setString:textView.text];
        }
        PasteTo Source Code
        -(IBAction)pasteImageToPasteBoard{
            UIPasteboard *appPasteBoard = [UIPasteboard pasteboardWithName:@"CopyFrom"
                     create:YES];
            NSData *data = [appPasteBoard dataForPasteboardType:@"com.appshop.copyfrom.imagedata"];
            imageView.image = [UIImage imageWithData:data];
        }

        -(IBAction)pasteStringToPasteBoard{
            UIPasteboard *appPasteBoard = [UIPasteboard pasteboardWithName:@"CopyFrom" 
                     create:YES];
            textView.text = [appPasteBoard string];
        }


    Using UIPasteBoard in iPhone programming is amazingly simple and opens up some possibilities that we did not have a year ago. To use UIPasteBoard you simply create a instance using pasteboardWithName, put stuff into the paste board and then set the persistant property equal to YES. Then any app can get a reference to your paste board and use the data contained within. You can use it for simple strings and even data that you can put into NSData like SQLite databases.
于 2014-05-13T06:48:02.290 回答
0

使用自定义 URL 处理程序

它是指定的,因此它不符合您的规范。

但是,如果您不关心这一点,我会将 80k 图像写入内部存储器(文件系统),即使是 80Mb 并将“url”传递给其他应用程序。

大自我,0 研究努力:

复制到图像文件夹

通过 url 进行 IPC 通信

而且我的解决方案不起作用......我不是在给鱼,只是在教热鱼。

于 2012-09-08T14:00:45.797 回答
0

好吧,据我所知,对于自定义 URL 处理程序来说,~80k 太多了。但是您可以尝试对您的数据进行 Base64 编码并将其附加到自定义 URL。但我怀疑它是否适用于大量数据。

您还可以查看UIDocumentInteractionController,它旨在使用支持它们的其他应用程序打开文件。当您使用另一个应用程序打开附件时,邮件应用程序会执行此操作。

https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIDocumentInteractionController_class/Reference/Reference.html#//apple_ref/doc/uid/TP40009304

于 2012-09-08T14:21:29.680 回答