2016-10-05 4 views
0

나는 문구를 어떻게 쓰는지 확실하지 않았지만 당신이 도울 수 있기를 바라고 있습니다.NSObject 배열의 두 값을 일치시키는 방법은 무엇입니까? (Obj c)

나는 도서 개체가 있습니다. 각 책에는 제목, ID 문자열 및 읽은 여부에 대한 부울이 있습니다. 각 제목, ID 문자열 및 부울 값을 따로 얻을 수는 있지만 어떤 책이 어떤 부울에 속하는지 알 수 없습니다. 모든 데이터는 배열로 BookDataController 파일에 포함됩니다. 부울 값은 nsuserdefaults에 저장됩니다.

NSMutableArray *dataSource; 
dataSource = _bookDataController.bookInfoArray; 

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

: 여기

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

내가 배열의 값을 얻기 위해 사용하고 코드입니다 (반환 값 : [ "TITLE1", "제목 2", "TITLE3 등])

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

(반환 : [거짓, 허위 사실 등])

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를 그대로 사용하여 현재 호출을 얻으려면 Stack Overflow가 필요했습니다. 이 시점에서 내 수준의 이해를 나타냅니다. :) 아직 더 나은

, 지금이 좀 더 대해 생각하고 있음을, 내가 대신을 반환하고 싶습니다 :

("ID1"거짓 "ID2"거짓 "ID3" 사실, 등)

(두 통화가 아름다운 것!)

난 아무것도 명확히해야하는 경우 또는 당신이 더 많은 코드가 필요하면 알려주세요. 너무 고마워, 모두들!

+0

별도의 배열이 아닌'Book' 객체를 유지해야합니다. NSKeyedArchiver를 사용할 수는 있지만 솔직히 NSUserDefaults를 데이터 저장소로 사용하는 대신 Core Data를 사용해야합니다. – Paulw11

+0

해답을 가져 주셔서 감사합니다. 핵심 데이터에 대한 몇 가지 자습서를 시작했지만 여전히 약간 머리 위에 있습니다. 나는 그러나, 지속 할 것이다! 이 시점에서 부울은 nsuserdefaults에 저장되고 다른 모든 정보는 데이터 파일에서 호출됩니다. 콘솔에서 로그 아웃 할 수 있기를 원했습니다. 그것은 모두 내 tableview에서 잘 작동합니다. 그것은 테이블 뷰에 코드를 추가하는 방법과 콘솔에서 코드를 호출하는 방법에있어 다른 프로세스입니다. 그것이 내 머리를 감쌀 수없는 것입니다. – IWannaLearn

+0

책을 읽는 곳의 id, title 및 boolean을 반환하려고합니다. 또는 boolean이 true입니다. @IWannaLearn 맞지? 그렇다면 내 코드 –

답변

0

그래서이 답변은 여기에서 발견되었습니다 : https://stackoverflow.com/a/16710509/4225505. 그것은 내가 요구 한 것과 정확히 일치합니다. 우후, 가까워지고있어! 모든 값이 "일치"되도록 각 키의 모든 값을 기록하려고했습니다. "readIDString", "TITLE1":

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

이 반환 : [{ "제목을"때때로 그 대답에 내 코드를 기반으로 여기에 당신이 막 시작하고있는 질문을 명확하게하기 어렵다하지만 "ID1 ","hasRead ": true}, {"title ":"Title2 ","readIDString ":"id2 ","hasRead ": false} 등)

"hasRead "로 정렬하면 모든 참값 먼저.