Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 存储文件名和属性列表名常量的最佳做法 你认为在Objtovi-C中存储常数(如属性列表的文件名)的最佳实践是什么?p>_Objective C_Ios - Fatal编程技术网

Objective c 存储文件名和属性列表名常量的最佳做法 你认为在Objtovi-C中存储常数(如属性列表的文件名)的最佳实践是什么?p>

Objective c 存储文件名和属性列表名常量的最佳做法 你认为在Objtovi-C中存储常数(如属性列表的文件名)的最佳实践是什么?p>,objective-c,ios,Objective C,Ios,我想在以下代码中改进硬编码的“Config.plist”: NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Config" ofType:@"plist"]; NSDictionary *rows = [[NSDictionary alloc]initWithContentsOfFile:plistPath]; 你可以用 在处理诸如NSDictionary之类的对象时,可能需要将其转换为NSData的实例。这可以通过

我想在以下代码中改进硬编码的“Config.plist”:

NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Config" ofType:@"plist"];
NSDictionary *rows = [[NSDictionary alloc]initWithContentsOfFile:plistPath];
你可以用

在处理诸如
NSDictionary
之类的对象时,可能需要将其转换为
NSData
的实例。这可以通过以下方法完成:

[NSKeyedArchiver archivedDataWithRootObject:(id)];


最好的解决方案通常是将这种逻辑移动到一个模型对象中,比如
MYConfiguration
。这样,您就可以使用显式方法查询
MYConfiguration
,而不会直接访问
NSDictionary

关于该文件的名称,有许多方法可以对其进行抽象,这取决于您真正需要的重用程度(这里可能会过火)

首先是常数。在
MYConfiguration.m
中,可以像这样放置一个私有常量:

static NSString * const kConfigurationFileBaseName = @"Config";
您还可以使用返回路径的方法:

- (NSString *)pathToConfigurationFile {
  return [[NSBundle mainBundle] pathForResource:kConfigurationFileBaseName ofType:@"plist"];
}
直接在
pathToConfigurationFile
中硬编码文件名,而不是使用常量,这种情况并不少见。常量通常仅在值被多次使用的情况下才需要。如果给定的常量只出现一次,那么将该值移到别处有时会使代码更难理解。这些只是指导方针,不是规则

如果您需要常量本身公开可用,那么可以在
MYConfiguration.h
中这样声明它:

extern NSString * const kMYConfigurationFileBaseName;
然后在.m中定义它:

NSString * const kMYConfigurationFileBaseName = @"Config";
但所有这一切的关键是在与常量使用相关的标题中定义这些常量。你不会为每件事创造一些中心的“MYGlobals”垃圾场

extern NSString * const kMYConfigurationFileBaseName;
NSString * const kMYConfigurationFileBaseName = @"Config";