2014-03-04 3 views
0

NSManagedObject 클래스에이라는 이름의 firstnamelastname 속성이 있습니다. 다른 속성이 필요합니다 uppercaseFirstLetter 이것은이 두 가지에서 계산됩니다. 재산권 uppercaseFirstLetter은 과도하지 않을 수 있으며코어 데이터의 계산 된 영구 속성

NSSortDescriptor *sortLastNameDescriptor = 
[[NSSortDescriptor alloc] initWithKey: @"uppercaseFirstLetter" 
          ascending: YES 
          selector: @selector(localizedStandardCompare:)]; 

이 uppercaseFirstLetter 계산하기위한 코드입니다 sectionNamedKeyPath

[[NSFetchedResultsController alloc] initWithFetchRequest: fetchRequest 
            managedObjectContext: [DatabaseManager context] 
             sectionNameKeyPath: @"uppercaseFirstLetter" 
               cacheName: nil]; 

과 정렬 설명에 사용됩니다

NSString *aString = nil; 
NSString *lastName = [self valueForKey:@"firstName"]; 
NSString *firstName = [self valueForKey:@"lastName"]; 

if (lastName.length) { 
    aString = [lastName uppercaseString]; 
} else if (firstName.length) { 
    aString = [firstName uppercaseString]; 
} else { 
    aString = @"#"; 
} 

NSString *stringToReturn = [aString substringToIndex:1]; 

내가 어떻게 대문자 첫 글자과 코드의 변경 내용을 만들어야합니다. 이 결과를 얻으려면 어떻게해야합니까?

+0

맞춤 설정 메소드를 추가 했습니까? 아니면'NSManagedObject'의 다른 메소드가 도움이 될까요? – Wain

+1

관련 항목 : http://stackoverflow.com/questions/4874193/core-data-willsave-method – Wain

답변

1

당신은 uppercaseFirstLetter 속성을 업데이트 할 firstNamelastName에 대한 사용자 정의 setter 메소드를 사용할 수는 :

- (void)setFirstName:(NSString *)firstName 
{ 
    [self willChangeValueForKey:@"firstName"]; 
    [self setPrimitiveValue:firstName forKey:@"firstName"]; 
    [self updateUppercaseFirstLetter]; 
    [self didChangeValueForKey:@"firstName"]; 
} 

또한 lastName이 작업을 수행해야합니다.

또는 firstNamelastName의 변경 사항을 KVO를 통해 확인하면 필요에 따라 uppercaseFirstLetter을 업데이트 할 수 있습니다. 이 문제를 해결하는 방법은 여러 가지가 있습니다. 키워드 : "NSManagedObject" "KVO"

마지막 해결 방법은 좀 더 세련된 방법 일 수 있습니다.