簡體   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