2017-09-22 20 views
1

私は初心者(学生)のプログラマーで、現在学校内で特定の専門分野に必要なコースを見ることができるコースカタログのようなアプリを構築しています。iOSにローカルデータを保存/ロードする最も良い方法は何ですか?

現在、私は別々のdata.swiftファイルを作成して、すべてのデータをグローバルとして保存し、huuuugeアレイを作成しました。メインのテーブルビューでは、data.swiftファイルからデータをロードするだけです。私tableviewcontrollerで

data.swift

let data1:[[[[String]]]] = [some datas] 
let data2:[[[[String]]]] = [some datas] 
let sectionHeaders [[String]] = [some datas] 

、私はなど

...

cell = data1[choice1][choice2][choice3] 

をすることによってそれらを読み込むしかし、私は、これはそれがどのようにではないことを知っています少なくともxcodeは "式は合理的な時間で解決するには複雑すぎる;私の配列で式を別個のサブ式に分割することを検討する" =(私はちょうど他の方法=(

私は実際にこれを少し調べて、一部の人々がplist、sqlite、json、xmlなどと言っているplplを推薦していることがわかりました。

BIGローカルデータの保存と読み込みには、最高/最も効率的で最速の方法は何ですか?

ありがとうございます!

+0

データをロードする方法とデータを使って何をやっているのかに関するコードを追加して、最高のアーキテクチャを選択するのを手伝ってください。 – AlexKoren

+1

JSONはシンプルな形式ですが、おそらく最も抵抗の少ないアプローチです。テキストエディタでファイルを簡単に編集できます。また、Webサービスからデータを取得してアプリケーションに組み込むのではなく、そのデータを取得するように選択した場合は、グッドな移行パスを提供します。あなたが言及しなかった1つの技術は、このような地元の永続的な店舗のためのアップルの優先技術であるCoreDataでしたが、あなたが開発の初心者であれば少し噛み砕くかもしれません。提供される限られた情報に基づいて、私はJSONに傾いています。 – Rob

+0

@AlexKorean、いくつかのコードを追加しました! –

答えて

1

私はあなたの構造が複雑であることを知っているが、私は複数のアレイの問題に取り組むために望んでいました。例えば、むしろ複数のアレイを持つよりも

let teachers = ["Larry Fine", "Curly Howard", "Moe Howard"] 
let classNames = ["Calculus 101", "Religious Studies 102", "Teaching with Technology in Film and Media Studies 201"] 

、あなたは、単一の構造を持っているかもしれません:のようなものを考えてみましょう

struct Course: Codable { 
    let teacher: String 
    let className: String 
} 

あなたは、テキストファイル内の単一のJSON構造にそれを表すことができ、courses.jsonを言います、そのよう:

:スウィフト4では

 
[ 
    { 
    "teacher" : "Larry Fine", 
    "className" : "Calculus 101" 
    }, 
    { 
    "teacher" : "Curly Howard", 
    "className" : "Religious Studies 102" 
    }, 
    { 
    "teacher" : "Moe Howard", 
    "className" : "Teaching with Technology in Film and Media Studies 201" 
    } 
] 

、あなたのような何かをしたいです

var courses: [Course]? 

そして、あなたのバンドルからJSONファイルをロードし、coursesを移入する:

let fileURL = Bundle.main.url(forResource: "courses", withExtension: "json")! 
let data = try! Data(contentsOf: fileURL) 
courses = try! JSONDecoder().decode([Course].self, from: data) 

あなたはその後、別のteacherscourseNames配列を上回る利点を持っているコースの単一のアレイで終わります。たとえば、コース名でコースを並べ替える場合は、コース名と教師名が一緒にソートされます。

あなたの構造はこれより複雑だと分かっていますので、あなたのJSONはもっと複雑になりそうですが、(a)カスタムオブジェクトのアイデアを説明したかっただけです。 (b)Swift 4の新しいCodableプロトコルとJSONDecoderを使用してJSONを解析します。

+0

うわー、素晴らしいです! ! どうもありがとうございました!! –

0

UserDefaultsクラスを使用できます。シンプルで簡単にアクセスできます。値を取得するさまざまな方法に関するドキュメントをお読みください。

データ保存:

let defaults = UserDefaults.standard 
defaults.set("Dewan Payroda", forKey: "Name") 

は、データを取得:

let data = defaults.object(forKey: "Name") 
print(data) 
関連する問題