2010-02-05 1 views
0

현재 NSUserDefaults에 저장된 색상을 추적하는 색상 표시가 있습니다. NSUserDefaultsController에 바인딩됩니다. 그러나 색상에 대한 변경 사항을 청취하여 그에 따라 내 뷰를 업데이트 할 수도 있습니다. 따라서 바인딩 외에도 색으로 알림을 게시하는 환경 설정 컨트롤러에 대상/동작을 색 영역에 추가했습니다.바인딩 및 대상/조치?

1) 타겟/액션과 바인딩이 모두 얼마나 안전합니까? 지연되거나 동기화되지 않아 다른 값을보고 할 가능성이 있습니까?

2) IBAction 메서드에서 색상을 가져올 때 사용자 기본값 또는 색상 영역에서 색상을 가져와야합니까?

여기 내 colorChanged입니다 : 조치 :

- (IBAction)colorChanged:(id)sender 
{ 
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[colorWell color] forKey:@"color"]; 
[notificationCenter postNotificationName:@"ColorChangedNotification" object:self userInfo:userInfo]; 
} 

그래서 내가이 일을해야합니다

[NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"color"]]; 

나 :

[colorWell color]; 

감사합니다!

+0

어떻게 색을 변경 하시겠습니까? 나는 TableViewCell에서 내 요소에 대한 어떤 액션도 얻을 수 없다. – sheetal

답변

3

1) 대상/작업 및 바인딩을 모두 가지고 있어도 얼마나 안전합니까? 가능성이 있습니까? 아니면 이 동기화되지 않고 다른 값을보고 할 수 있습니까?

나는 대부분의 부분에서 괜찮다고 생각합니다. 말할 가장 좋은 방법은 그것을 테스트하는 것입니다.

2) 내 IBAction 메서드에서 색상을 가져올 때 사용자 기본값이나 색상 영역에서 색상을 가져와야합니까?

분명히 확실히을 색상 판에서 직접 가져와야합니다. 왜? 사용자 기본값으로 저장할 때 지연이 발생할 수 있습니다. 지옥, 기본값은 응용 프로그램이 종료되기 바로 전에 한 번만 저장할 수 있으며 여전히 괜찮을 것입니다. (그래,이게 완전히 사실이 아니지만 여전히) 기본값의 주요 목적은 응용 프로그램의 출시가 아닌 응용 프로그램 시작 사이에 데이터를 유지하는 것입니다.

1

타겟/액션과 바인딩을 모두 포함하는 것이 안전합니다. NSNotificationCenter를 사용하여 알림을 게시하면 해당 알림은 옵저버와 동 기적으로 전달됩니다. (마술이 아니라는 명백한 경고로 관찰자 A가 통지를 받았을 때 관찰자 B에게 메시지를 보내면 관찰자 B는 아직 통지를받지 못했을 것입니다.) 다중 스레드는 더 복잡합니다.) 이것은 the documentation for NSNotificationCenter.

컬러 웰에서 직접 컬러를 읽는 것이 빠르고 IBAction에서 잘 될 것입니다. 응용 프로그램이 시작될 때 코드를 실행중인 경우 컬러 우물의 바인딩이 아직 업데이트되지 않았을 수 있으므로 사용자 기본값에서 읽는 것이 가장 좋습니다.