2016-10-05 2 views
0

Я не был уверен, как сформулировать этот вопрос, но я надеюсь, что вы сможете помочь.Как совместить два значения из массива NSObject? (Obj c)

У меня есть объект книги. Каждая книга имеет заголовок, строку идентификатора и логическое значение для того, было ли оно прочитано. Я могу получить значения каждого заголовка, строки идентификатора и логического значения отдельно, но я не могу понять, какая книга принадлежит логической. Все данные содержатся в файле 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); 

(Возвращает: [ложь, ложь, правда, и т.д.])

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

(Returns: [ "id1", "id2", "id3", и т.д.])

Я знаю, что я могу получить значения всех ключей, сохраненных в NSUserDefaults как так:

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

Но это возвращает все виды умолчаний, которые используются во всем приложении, а не в каком-либо упорядоченном порядке, который я могу сказать.

Итак, мой вопрос заключается в следующем: как я могу выйти из значений каждой книги, чтобы получить заголовки, которые идут с правильными логическими значениями? Это возможно?

(Пример: «Название книги»: ложь, «Название книги»: правда, и т.д.)

Теперь, когда я печатаю это, это выглядит как словарь! Но я не знаю, как это сделать. На Stack Overflow прошло несколько дней, чтобы получить текущие вызовы с помощью NSArray, как есть! Это должно указывать на мой уровень понимания на данном этапе. :)

еще лучше, теперь, когда я думаю об этом еще немного, я хотел бы вернуться вместо этого:

("id1" ложь "id2" ложь "id3": правда, и т.д.)

(Оба вызова будет великолепно!)

Пожалуйста, скажите мне, если мне нужно уточнить что-либо, или если вам нужно больше кода. Большое спасибо, всем!

+0

Вам нужно сохранить объекты 'Book', а не просто отдельные массивы. Вы можете использовать 'NSKeyedArchiver', но, честно говоря, вы должны использовать Core Data, а не рассматривать« NSUserDefaults »как хранилище данных. – Paulw11

+0

Благодарим вас за ответ. Я начал пару учебников по Core Data, но он все еще немного выше моей головы. Однако я буду упорствовать! В этот момент только логические значения сохраняются в nsuserdefaults, и вся другая информация вызывается из файла данных. Я просто хотел иметь возможность выходить на консоль. Все это отлично работает в моем столе. Это другой процесс в том, как код добавляется в tableview и как мне нужно его вызвать, чтобы увидеть его в консоли. Вот что я, кажется, не могу обернуть вокруг себя. – IWannaLearn

+0

Вы хотите вернуть id, title и boolean, где читается книга ИЛИ boolean - true. @IWannaLearn Право? Если это тогда, я отправлю свой код –

ответ

0

Итак, я нашел этот ответ здесь: https://stackoverflow.com/a/16710509/4225505. Он сделал именно то, что я просил. Woohoo, приближаясь! Я хотел записать все значения каждого ключа так, чтобы все значения «соответствовали». Иногда бывает трудно сформулировать вопрос, когда вы только начинаете, но вот мой код, основанный на этот ответ:

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); 

Это возвращает: [{ «название»: «title1», «readIDString»: «id1 "," hasRead ": true}, {" title ":" Title2 "," readIDString ":" id2 "," hasRead ": false} и т. д.]

Сортировка по" hasRead "содержит список всех истинных значений первый.

Смежные вопросы