stringWithContentsOfURL将所有附加文件作为NSString返回

时间:2012-12-17 06:28:38

标签: objective-c ios nsstring uti

实施统一类型标识符,当通过电子邮件发送单个附件时,stringWithContentsOfURL会返回NSString,其中包含NSURL定义的文件内容。

从附有多个文件的电子邮件中选择文件时,stringWithContentsOfURL会将所有附加的文件(包含标题信息)作为NSString返回。

有没有办法只打开所选文件?

更新

  • 第一个文件用户触摸,文件按预期处理。用户可以触摸多次,一切都很好。
  • 触及任何后续文件,电子邮件的原始来源,减去电子邮件标题,将保存为NSURL代表的文件。
  • 在iphone 6.0.1和ipad 5.1.1上已经观察到此行为。

您可以解析原始来源并确定从NSURL中选择了哪个文件,我认为可能存在问题。

结束更新

代码(两种情况下的url都指向单个文件)。文件扩展名为* .defects

NSString *file = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];

单一附件邮件的结果

"Defect Names"
"Test1 Area"
"Test2 Area"
"Test 3 Area"
"Test 4 Area"
"Extra"

包含多个附件的邮件的结果

--Apple-Mail=_785C0CB9-CB2F-43BE-AD5F-D7DEF5F97EFC
Content-Disposition: attachment;
    filename=Areas.defects
Content-Type: defects/x-defects;
    x-unix-mode=0644;
    name="Areas.defects"
Content-Transfer-Encoding: 7bit

"Area of Defect"
"Test1 Area"
"Test2 Area"
"Test 3 Area"
"Test 4 Area"
"Extra"

--Apple-Mail=_785C0CB9-CB2F-43BE-AD5F-D7DEF5F97EFC
Content-Disposition: attachment;
    filename="pos.defects"
Content-Type: defects/x-defects;
    x-unix-mode=0644;
    name="pos.defects"
Content-Transfer-Encoding: 7bit

"Position of Item"
"Test1 Position"
"Test2 Position"
"Test 3 Position"
"Test 4 Position"
"Extra"

...
--Apple-Mail=_785C0CB9-CB2F-43BE-AD5F-D7DEF5F97EFC--

1 个答案:

答案 0 :(得分:0)

虽然我对这种行为感到惊讶(我本以为只能看到用户点击的附件)但这并不难解决。

您可以轻松编写多部分MIME扫描程序,将多部分邮件拆分为单个附件。

您确定在发送的电子邮件中确实有个别文件吗?检查原始消息。

您也可能错误地设置了UTI注册,请阅读我的文章:http://www.cocoanetics.com/2012/09/fun-with-uti/

通常,如果您通过文件打开(从另一个应用程序)打开一个应用程序,您将收到一个文件URL,该文件URL指向接收应用程序的文档/收件箱文件夹中所述文件位置的副本。检查此URL以查看系统所在的文件类型。如果您不删除它,则可以使用Xcode管理器将应用程序文件夹的内容复制到桌面。