如何为 Xcode 6.x 的 plist 创建自定义结构定义?

Posted

技术标签:

【中文标题】如何为 Xcode 6.x 的 plist 创建自定义结构定义?【英文标题】:How to create a custom structure defintion for a plist for Xcode 6.x? 【发布时间】:2015-02-25 08:04:56 【问题描述】:

更明确地说,当我打开 plist 编辑器并单击鼠标右键时,我可以从随 Xcode 6 一起安装的可用列表类型列表中选择一个属性列表类型。如果可以的话,那就太好了让我的自定义类型出现在此菜单中。我看到Apple为ios提供的那些是在插件DVTiOSPlistStructDefs.dvtplugin中编译的,它位于Contents/PlugIns中。

【问题讨论】:

【参考方案1】:

遗憾的是,您不能像您想象的那样简单地做到这一点。您可以存储在 plist 中的唯一对象是 NSDictionary、NSArray、NSString、NSNumber 和 NSData。但是你几乎可以用这些类来表示你能想象到的任何类型的对象/模型图。

通常当我们加载一个 plist 文件时,我们会将它读入一个 NSDictionary 对象(有时是一个 NSArray)

NSDictionary *theDictionary = [[NSDictionary alloc]initWithContentsOfFile:@"aFilePath.plist"];

然后从那里我们将能够提取我上面列出的那些类的对象。因此,您需要编写初始化方法来从方法或 C 函数中的一个创建数据对象或结构。

例如。

//custom initializer
-(instanceType )initWithDictionary:(NSDictionary *)dictionary

    if (self=[super init])
    self.floatProperty = [[dictionary objectForKey:@"theFloatKey"]floatValue];
    self.stringProperty = [dictionary objectForKey:@"theStringKey"];
    //etc

    

return self;




//or like this for some struct
myDataStruct structCreateFromDictionary(NSDictionary *dictionary) 

    myDataStruct result;

    result.floatThing = [[dictionary objectForKey:@"theFloatKey"]floatValue];
    result->stringPointer = [dictionary objectForKey:@"theStringKey"];

    //etc

return result;

【讨论】:

我知道如何从 plist 中读取数据,我指的是如何拥有自定义列表类型(结构),就像 Xcode 中提供的那样,您可以在其中拥有字典的默认键和值具有多个允许值的下拉列表。这种方式对于编辑 plist 的人来说会容易得多,只需选择适当的值。 @Sindrom 你找到解决方案了吗?因为我也有同样的问题,不明白自定义定义放在哪里..

以上是关于如何为 Xcode 6.x 的 plist 创建自定义结构定义?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Facebook SDK 配置 plist

如何使用 Firebase 推送通知服务而不在自定义创建的框架 Xcode 中添加 GoogleService-Info.plist 文件

Xcode:如何为使用 Storyboard 创建的子视图设置委托?

如何为 iPhone Light 版本应用程序创建 xcode 项目?

如何为 iOS 6 设置 plist 的演练或教程?

如何为设置包的文本字段提供占位符(Root.plist)