2014-04-24 2 views
0

카테고리에 게으른 인스턴스화를 사용하려고하지만 명백한 무한 루프를 입력하지 않고이를 수행하는 방법에 전념하고 있습니다. 여기에 ilustrate에 대한 몇 가지 코드 :Category + Objective C의 게으른 인스턴스화 패턴

@implementation User (Extras) 

- (CacheControl *)cache 
{ 
    CacheControl *_cache = (CacheControl *)[self valueForKey:@"cache"]; 
    if(!_cache){ 
     [self setCache:(CacheControl *)[NSEntityDescription insertNewObjectForEntityForName:@"CacheControl" inManagedObjectContext:self.managedObjectContext]]; 
    } 
    return _cache; 
} 
@end 

이 상황을 해결하거나 그냥 전혀 그렇게하지 않는 방법을 어떤 아이디어가?

- (CacheControl *) cache { 
    [self willAccessValueForKey:@"cache"]; 
    CacheControl * cache = [self primitiveValueForKey:@"cache"]; 
    [self didAccessValueForKey:@"cache"]; 

    if (cache == nil) { 
     cache = [NSEntityDescription insertNewObjectForEntityForName:@"CacheControl" inManagedObjectContext:self.managedObjectContext]; 
     [self setPrimitiveValue:cache forKey:@"cache"]; 
    } 
    return cache; 
} 

비슷한 예는 "코어 데이터 프로그래밍 가이드"에서 찾을 수 있습니다 및 지역 :

+1

'User'는'cache' 속성을 가지고 있습니까? – Rich

+0

우리는 그렇게 생각해야한다고 생각하지만 질문으로는 명확하게하지 않습니다. – fatuhoku

+0

예, 사용자가 cache 속성을 가지고 있지만, Martin R의 대답이이 문제를 해결했습니다. –

답변