質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Q&A

2回答

2159閲覧

objective-cでkey一つに対して複数の値をセットして取り出す方法

mm--_--mm

総合スコア113

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

0グッド

0クリップ

投稿2016/04/30 01:37

いつもお世話になっております。

表題の件ですが、下記のような配列を作成したいと考えております。
0 = hoge1,hoge2
1 = hoge3,hoge4
2 = hoge5,hoge6
3 = hoge7, hoge8

03がキーでhoge1hoge8が値のイメージです。

このような配列を生成しNSUserdefaultsで保存して扱いたいと考えております。これを実現するにはNSdictionaryやNSarray等のどれを使って実現すれば良いでしょうか?(値は追加したり削除したりできるようなものです)

わかる方おりましたら教えていただけると幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

勘なのですが、NSMutableDictionaryで、値に配列を入れればいかがでしょうか?

- (void)viewDidLoad { [super viewDidLoad]; NSMutableDictionary *dic = @{@"abc":@[@"a", @"b"]}; NSLog(@"%@",[dic objectForKey:@"abc"]); }

投稿2016/07/29 00:49

編集2016/07/29 01:10
maplesugar_17

総合スコア32

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

03がキーでhoge1hoge8が値のイメージです。

値がカスタムクラスなどの場合少し書き方が変わるかもしれませんが、およそこの感じの書き方になると
思います。

Objective-Cの場合

Objc

1#import "ViewController.h" 2 3@interface ViewController () 4 5@end 6 7@implementation ViewController 8 9- (void)viewDidLoad { 10 [super viewDidLoad]; 11 12 13 // --- 保存 --- 14 NSArray *dataArray = @[@{@1: @[@"value1",@"value2"]},@{@2: @[@"value3",@"value4"]},@{@3: @[@"value5",@"value6"]},@{@4: @[@"value7",@"value8"]}]; 15 16 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 17 NSMutableArray<NSData*> *saveDataArray = [NSMutableArray array]; 18 19 for (NSDictionary *dictData in dataArray) { 20 NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dictData]; 21 [saveDataArray addObject: data]; 22 } 23 24 [defaults setObject: saveDataArray forKey: @"data"]; 25 [defaults synchronize]; 26 27 28 // --- 読み込み --- 29 NSArray *nsdataArray = [defaults objectForKey: @"data"]; 30 NSMutableArray *readDataArray = [NSMutableArray array]; 31 32 if (nsdataArray) { 33 34 for (NSData *data in nsdataArray) { 35 NSDictionary *dict = [NSKeyedUnarchiver unarchiveObjectWithData: data]; 36 if (dict) { 37 [readDataArray addObject: dict]; 38 } 39 } 40 } 41 42 NSString *str = readDataArray[0][@1][1]; 43 NSLog(str); 44 //=> value2 45} 46 47@end

Swiftの場合
※最初Swiftの質問勘違いしてました、、、作ったので一応載せておきます。

swift

1import UIKit 2 3class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 8 9 typealias DataType = [[Int: [String]]] 10 11 // --- 保存 --- 12 let dataArray: DataType = [[1:["value1","value2"]], 13 [2:["value3","value4"]], 14 [3:["value5","value6"]], 15 [4:["value7","value8"]]] 16 17 let defaults = NSUserDefaults.standardUserDefaults() 18 19 var saveDataArray = [NSData]() 20 for data in dataArray { 21 let nsdata = NSKeyedArchiver.archivedDataWithRootObject(data) 22 saveDataArray.append(nsdata) 23 } 24 25 defaults.setObject(saveDataArray, forKey: "data") 26 defaults.synchronize() 27 28 29 // --- 読み込み --- 30 if let nsdataArray = defaults.objectForKey("data") as? [NSData] { 31 32 var dataArray: DataType = [] 33 for data in nsdataArray { 34 if let data = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? [Int: [String]] { 35 dataArray.append(data) 36 } 37 } 38 39      print(dataArray[0][1]![1]) 40      //=> value2 41 42 print(dataArray) 43 //=> [[1: ["value1", "value2"]], [2: ["value3", "value4"]], [3: ["value5", "value6"]], [4: ["value7", "value8"]]] 44 } 45 } 46}

投稿2016/04/30 03:41

編集2016/04/30 03:42
_Kentarou

総合スコア8490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mm--_--mm

2016/04/30 04:05

ご回答いただきありがとうございます。 参考にさせていただきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問