2012-09-20 8 views
0

아이폰 OS 6 I이 다음과 같은 코드가 있습니다있는 NSDictionary

NSAssert(dst, @"sdiasiosadiodasio"); 

// Add to a list so that we don't lose the references 
[layersToDsts setObject:dst forKey:layer]; 

NSLog(@"The key is %lu", layer);     

for (Bit *layer in [layersToDsts allKeys]) 
{ 
    BitHolder *dst = [layersToDsts objectForKey:layer]; 

    NSLog(@"My added key is %lu", layer); 

    NSAssert(dst, @"ddddd"); 
} 

layersToDsts가 변경 가능한 NSDictionary입니다. 개체의 주소를 키로 사용하여 다른 개체에 매핑하려고합니다.

코드는 몇 가지 이유가 iOS 5에 근무, 코드가 분명히

The key is 484196128 
My added key is 484253328 
Assertion failure in -[Animator animateImpl:] 'NSInternalInconsistencyException', reason: 'ddddd' 

를 제공, 나는 사전에 추가 된 개체를 검색 할 수 없습니다. 개체가 0이 아닙니다. 매핑 키가 다른 주소 인 이유는 무엇입니까 ?? 이 코드는 iOS 5에서 완벽하게 작동합니다 ....

+0

하지만 내 코드는 iOS 5에서 작동했습니다 ... – SmallChess

+0

@StevenFisher 나는 이것이 복제본에 동의하지 않습니다 ... 키가 복사되는 것에 대해 묻지 않습니다. 코드가 실패한 이유를 묻고 있습니다. 분명히 깨닫지 못합니다. 키가 복사됩니다. –

+0

흠. 공정하다. 여전히 그 사본이 그 이유입니다. 사전에 키를 복사해야하는 코드는 iOS 버전에서 작동하지 않아야합니다. 이 점을 이해하려면'Layer'의 정의를보아야 할 것 같습니다. –

답변

3

CALayer는 NSCopying 프로토콜을 구현하지 않으므로 키로 사용할 수 없으므로 CALayer의 주소를 사용하여 다른 방법으로도 NSNumber로 설정할 수 있습니다. CALayer에서 name 속성을 사용하십시오.

+1

NSValue가이 작업에 훨씬 더 적합하다. –

1

개체 주소를 키로 사용하려면 해당 주소가 포함 된 개체를 만들어야합니다.

[layersToDsts setObject:dst forKey:[NSValue valueWithPointer:layer]]; 

예를

들어하지만 난 강력하게 그 일에서 당신을 낙담 . 대신 적절한 키를 사용하고 특정 개체 주소에 의존하지 않아야합니다.