繁体   English   中英

硬编码这些数据的最佳方法是什么? Objective-C的

[英]What is the best way of hardcoding this data. Objective-C

我在应用程序中有一个视图是一个帮助功能。

该视图由textview和tableview组成。 表格视图包含大量问题,当用户选择问题时,它会在UITextView显示答案。

我正在尝试做的是对这些数据进行硬编码。 现在我可以获得视图,工作得很好而且简单,只是背后的代码不是最干净的,并且问题和答案总是在变化,我希望这些数据能够轻松存储。 我在想的是像这样的NSMutableArray。

NSMutableArray *HelpPage = [NSMutableArray arrayWithObjects: <answers,questions here>

我怎么说这样的话呢

NSMutableArray* HelpPage = [NSMutableArray arrayWithObjects: 
@"How do i close", @"Press close button"
@"How do i open", @"Press the open button",

顺便说一句我应该添加这些只是例子大声笑。

理想情况下,我喜欢它在单独的.h / .m文件中,所以人们可以给我发送更新的版本,而且我不需要花费很多时间来合并。

NSMutableArray是最好的方法吗?

在应用程序的其他领域,我记录用户的种族,我在这里做的是

.h file
+ (NSArray*) ArrayofEthnicity;

.m file
+ (NSArray*) ArrayofEthnicity{
    return [NSArray arraywithObjects: @"English", @"French", @"German", nil];
} 

每次我需要它打电话

NSArray* Data = [EthnicityData ArrayofEthnicity];

有更好的方法吗?

谢谢

这取决于您有多少时间使用问题和答案数据以及您需要存储的数据量。

如果要读取大量数据,则应将它们写入.plist文件。

如果您的问题和答案很少,并且您必须在应用程序中大量访问它们,那么您可以将它们存储到存储在单例实例中的NSMutableArrayNSMutableDictionary中,以便能够从代码中的任何位置访问它。

另一种解决方案是使用Core Data。 它的实施时间更长,但这是最强的方式。

核心数据使您可以在应用程序内部使用SQLite数据库来存储和读取数据,但您也可以使用它来从远程Web服务读取数据。 有一次,这个解决方案实施时间最长,但如果您需要一个非常优化且设计精良的解决方案,这是最好的方法。

最好的方法是属性列表文件。 (也称为.plist文件)

请查看Apple编程指南... https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/PropertyLists/QuickStartPlist/QuickStartPlist.html

以下指南中的一个简单示例。 从本质上讲,它是存储应用程序参数的好地方。

清单1-2读入和转换XML属性列表

- (id) init {

    self = [super init];
    if (self) {
        NSString *errorDesc = nil;
        NSPropertyListFormat format;
        NSString *plistPath;
        NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
           NSUserDomainMask, YES) objectAtIndex:0];
        plistPath = [rootPath stringByAppendingPathComponent:@"Data.plist"];
        if (![[NSFileManager defaultManager] fileExistsAtPath:plistPath]) {
            plistPath = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"];
        }
        NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath];
        NSDictionary *temp = (NSDictionary *)[NSPropertyListSerialization
            propertyListFromData:plistXML
            mutabilityOption:NSPropertyListMutableContainersAndLeaves
            format:&format
            errorDescription:&errorDesc];
        if (!temp) {
            NSLog(@"Error reading plist: %@, format: %d", errorDesc, format);
        }
        self.personName = [temp objectForKey:@"Name"];
        self.phoneNumbers = [NSMutableArray arrayWithArray:[temp objectForKey:@"Phones"]];

    }
    return self;
}

您可以使用NSMutableDictionary来存储问题和答案

NSMutableDictionary *qAndA = [[NSMutableDictionary alloc] init];
// add all Q&A with object is answer, key is question
[qAndA setObject:@"Press close button" forKey:@"How do i close"];
[qAndA setObject:@"Press the open button" forKey:@"How do i open"];
// to list all question
NSArray *questions = [qAndA allKeys];
.................................. 
// when need answer to a question
NSString *question = @"How do i close";
NSString *answer = [qAndA objectForKey:question];

json是AFAIK最易读的格式。 您的JSON文件将如下所示

{
     "How do I close": "Press close",
     "How do I open": "Press open"
}

或者,以数组格式,

[
     "How do I close", "Press close",
     "How do I open", "Press open"
]

使用NSJSONSerialization加载几行代码。

祝好运!

在我看来, plist不是存储人类可读文本的最佳方式,而JSON不是最易读的格式。 特别是如果文件的维护者不是开发人员,我想就是这样。

我宁愿在markdown中编写帮助文本,还有一些固定的简单结构,比如每个问题的标题+自由文本。 或者更详细的列表,链接,无论你需要什么。

# Question 1

Answer 1 goes here.

# Question 2

Answer 2...

然后我将编写一个解析器将文本导入内部格式,以便向用户显示它们(一组字典或类似的东西)。

你写了一次,然后只更新文本文件。 维护者可以使用markdown编辑器来验证语法。

幸运的是有一降价 解析器破解这个。 我推荐libsoldout ,专门用于编写自定义解析器。

我写了一个示例项目来演示它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM