2016-10-05 3 views
0

私は質問のフレーズの仕方がわかりませんでしたが、あなたが手伝ってくれることを望んでいます。NSObject配列の2つの値をどのように一致させるか? (Obj c)

私はBookオブジェクトを持っています。各書籍には、タイトル、ID文字列、および読み込まれたかどうかのブール値があります。私は各タイトル、ID文字列、ブール値を別々に得ることができますが、どの本がどのブール値に属しているのかわかりません。すべてのデータは配列としてBookDataControllerファイルに含まれています。ブール値はnsuserdefaultsに保存されます。ここで

@interface Book : NSObject 
@property (nonatomic, strong) NSString *title; 
@property (nonatomic, strong) NSString *readIDString; 
@property BOOL hasRead; 
@end 

は、私は配列の値を取得するために使用しているコードです:

NSMutableArray *dataSource; 
dataSource = _bookDataController.bookInfoArray; 

NSArray *bookTitles = [dataSource valueForKey:@"title"]; 
NSLog(@"DataSource Title: %@", bookTitles); 

(戻り値:[ "TITLE1"、 "TITLE2"、「TITLE3など])

NSArray *titlesRead = [dataSource valueForKey:@"hasRead"]; 
NSLog(@"DataSource Bool: %@", titlesRead); 

(戻り値:[FALSE、FALSE、TRUE、など])

NSArray *readIDs = [dataSource valueForKey:@"readIDString"]; 
NSLog(@"DataSource ReadID: %@", readIDs); 

(戻り値:[ "ID1"、 "ID2"、 "ID3"、など])

私はそうのようなNSUserDefaultsに保存されたすべてのキーの値を得ることができることを知っている:

NSArray *keys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]; 
for(NSString *key in keys) 
{ 
    NSLog(@"value: %@ forKey: %@", [[NSUserDefaults standardUserDefaults] valueForKey:key], key); 
} 

しかし、この私が知ることができるソート可能な順序ではなく、アプリ全体で使用されているすべての種類のデフォルトを返します。

私の質問はこれです。正しいブール値を持つタイトルを得るために、各書籍の値をログアウトするにはどうすればよいですか?これは可能ですか?

(例:「本のタイトル」:偽、「本のタイトル」:真、など)

今、私はこれを入力していますので、それは辞書のように見えます!しかし、私はこの点に到達する方法を知らない。 NSArrayをそのまま呼び出して現在の呼び出しを取得するのはスタックオーバーフローの日です!それは私の理解のレベルをこの時点で示すはずです。 :)

いっそのこと、今私はいくつかのより多くの本を考えていることを、私の代わりにこれを返すしたいと思います:

( "ID1":偽、 "ID2":偽、 "ID3":真、など)

(両方の呼び出しが壮大だろう!)

私は何かを明確にする必要がある場合や、より多くのコードが必要な場合は教えてください。ありがとう、皆さん!

+0

別々の配列ではなく、 'Book'オブジェクトを永続化する必要があります。あなたは 'NSKeyedArchiver'を使うことができますが、正直なところ、NSUserDefaultsをデータストアとして扱うのではなく、Core Dataを使うべきです – Paulw11

+0

ありがとうございました。私はCore Dataに関するいくつかのチュートリアルを開始しましたが、それはまだ私の頭の上です。私はしかし、持続する!この時点でブール値のみがnsuserdefaultsに保存され、その他の情報はすべてデータファイルから呼び出されます。私はちょうどコンソールにログアウトできるようにしたかったのです。それはすべて私のtableviewで素晴らしい作品です。これは、コードがテーブルビューに追加される方法と、コンソールでそのコードを表示するためにコードをどのように呼び出す必要があるかという点で異なるプロセスです。それは私の頭を包み込むように見えないものです。 – IWannaLearn

+0

id、title、およびbooleanを返したい場合は、bookを読み込みます。ブール値はtrueです。 @IWannaLearnそう?それは私のコードを投稿する場合 –

答えて

0

だから、私はここでこの答えを見つけました:https://stackoverflow.com/a/16710509/4225505。それはまさに私が求めていたことでした。ウーホー、近づいて!私は、すべての値が一致するように各キーのすべての値を記録したかったのです。時にはそれはあなたがまだ始まったばかりだが、ここに私のコードは、その回答に基づいている質問を明確にするのは難しい:

NSMutableArray *anArray = [NSMutableArray array]; 

for(int idx = 0; idx<[bookTitles count]; idx++) 
{ 
    NSDictionary *dict = @{@"title": bookTitles[idx], @"readIDString": readIDs[idx], @"hasRead": titlesRead[idx]}; 
    [anArray addObject:dict]; 
} 

NSLog(@"%@", anArray); 

NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"hasRead" ascending:NO]; 


[anArray sortUsingDescriptors:@[descriptor]]; 

NSLog(@"%@", anArray); 

これが返されます。 [{「タイトル」:「タイトル1」、「readIDString」:「ID1を"hasRead":true}、 {"title": "Title2"、 "readIDString": "id2"、 "hasRead":false}など)

"hasRead"でソートするとすべての真値がリストされます最初。

関連する問題