Ash*_*osh 18 objective-c ios imessage ios7
在我的应用程序中,我需要将一些自定义数据文件从一个设备发送到另一个设备,我正在尝试使用Mail,iMessage/Message和Airdrop.
这适用于Mail和Airdrop但使用iMessage并且它很好,但在接收端,我无法打开文件.它只是不允许我对它做任何事情.
有任何想法吗??
这就是我的文档类型:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFile</key>
<string>abc.png</string>
<key>CFBundleTypeName</key>
<string>ABC Custom Data type</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>Handler Rank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>com.company.abc.wd</string>
</array>
</dict>
</array>
Run Code Online (Sandbox Code Playgroud)
这就是我发送数据的方式:
NSMutableDictionary * dict = [NSMutableDictionary dictionary];
[dict setObject:currentDataSet forKey:@"actualData"];
NSData * meetingData = [NSKeyedArchiver archivedDataWithRootObject:dict];
Meeting * dataItem = [[Meeting alloc]initWithData:meetingData
type:@"com.abc.xyz.wd" subject:@"Meeting"
previewImage:[UIImage imageNamed:@"appIcon.png"]];
UIActivityViewController * activityController =
[[UIActivityViewController alloc]initWithActivityItems:@[dataItem]
applicationActivities:nil];
activityController.excludedActivityTypes =
@[UIActivityTypePostToTwitter, UIActivityTypePostToWeibo];
[self presentViewController:activityController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
这个答案是正确的,因为如果自定义文档符合public.text. 此解决方案的缺点是文档被预览为原始文本,这可能不是预期的结果。
public.data通过创建快速查看预览扩展,可以从消息应用程序打开符合 的文档,而无需将其作为原始文本进行预览。关于如何构建 Quick Look Preview Extension 的文档并不多,但它非常简单:
在 Xcode 中,选择File> New> Target。
选择Quick Look Preview Extension,为您的扩展命名,然后单击Finish。
在info.plist新创建的扩展中,在NSExtension> NSExtensionAttributes>下添加一个新项目QLSupportedContentTypes,并将该项目的值设置为您应用的自定义文档类型。例如:
...
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>QLSupportedContentTypes</key>
<array>
<string>com.company.abc.wd</string>
</array>
<key>QLSupportsSearchableItems</key>
<true/>
</dict>
<key>NSExtensionMainStoryboard</key>
<string>MainInterface</string>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.quicklook.preview</string>
</dict>
...
Run Code Online (Sandbox Code Playgroud)使用MainInterface.storyboard和PreviewViewController定义自定义快速查看预览的布局。更具体地说,从preparePreviewOfFile函数中提供的 URL 读取数据并相应地填充 ViewController。一个简单的例子(在 Swift 4 中):
func preparePreviewOfFile(at url: URL, completionHandler handler: @escaping (Error?) -> Void) {
do {
let documentData = try Data(contentsOf: url)
// Populate the ViewController with a preview of the document.
handler(nil)
} catch let error {
handler(error)
}
}
Run Code Online (Sandbox Code Playgroud)我在创建扩展时遇到了一些陷阱:
导出的 UTI 标识符必须全部为小写。当某些字符为大写时,即使我在 Quick Look Preview Extension 中使用了相同的大写,也从未显示 Quick Look 预览。
不允许快速查看预览扩展链接到动态库。如果链接了动态库,则不会加载快速查看预览。
Quick Look ViewController 不允许有任何按钮。如果它包含按钮,则不会加载快速查看预览。
其他资源:
Info.plist 中键的值LSItemContentTypes应等于会议对象声明的值。
据推测您的会议对象遵守该UIActivityItemSource协议。确保您返回的值(从委托方法activityViewController:dataTypeIdentifierForActivityType:)与您在Info.plist.
| 归档时间: |
|
| 查看次数: |
2079 次 |
| 最近记录: |