2016-11-18 27 views
0

阅读plist文件的问题我简单的代码这样在即时聊天扩展与NSDictionary的initWithResourceForPath梅索德

NSDictionary * languagesDict=nil; 
    if(fileName) 
    { 
     NSString* path=[[NSString alloc] initWithString:[[NSBundle mainBundle] pathForResource:fileName ofType:@"plist"]]; 
     if(path) 
     { 
      languagesDict=[[NSDictionary alloc] initWithContentsOfFile:path]; 
      path=nil; 
     } 
    } 

它工作在主应用程序很好,但在imessageexension它提供了一个空的字典。

当然,我已经放置了plist文件,我想在扩展目标的复制束资源中使用。

我甚至试图复制plist文件到扩展目录,因为没有工作。

回答

0

如果你想要从应用和扩展共享的.plist

你的应用程序,你的扩展使用不同的默认目录1)。

要了解有关扩展如何工作的背景,请阅读苹果App Extension Intro

要在您的Apps &扩展程序之间共享文件,您需要设置一个App Group Directory并使用它代替。

分步教程如何在Obj-C中设置它可以找到here

2)如果存在的.plist内您的扩展捆绑

此代码的工作在我们的扩展(Swift3):

let plistNameWithoutExtension = "myPlist" 
let path = self.main.path(forResource: plistNameWithoutExtension, ofType: "plist")! 
let url = URL(fileURLWithPath: path) 
let data = try Data(contentsOf: url) 
let plist = try PropertyListSerialization.propertyList(from: data, options: .mutableContainers, format: nil) 

未经测试的Objective-C代码:

NSString *plistNameWithoutExtension = @"myPlist"; 
NSString *path = [[NSBundle mainBundle] pathForResource:plistNameWithoutExtension ofType: @"plist"]; 
NSURL *url = [NSURL fileURLWithPath:path]; 
NSData *data = [NSData dataWithContentsOfURL:url]; 
NSError *error = nil; 
NSDictionary *plist = [NSPropertyListSerialization propertyListWithData:data options:NSPropertyListMutableContainers format:nil error:&error]; 
+0

感谢您的快速回答,但我不明白,为什么我应该安装应用程序组。我想阅读的文件是在扩展的资源束中,所以如果我可以从这个位置读取图像资产,我也应该能够读取plist文件。我做了NSFileManager的另一个实验,我能够加载文件到NSData,但是当我试图unarchive我没有。所以它看起来像我有文件,但我不能读它。 – Wojtas

+0

你可以给我的东西在目标C请 – Wojtas

+0

对不起。更新。 – shallowThought