0

私はこの次のコードを持っています:

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

layerToDsts は可変NSDictionaryです。オブジェクトのアドレスをキーとして使用して、別のオブジェクトにマッピングしようとしています。

コードは iOS 5 で動作しました。何らかの理由で、コードは

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

明らかに、辞書に追加したオブジェクトは取得できません。オブジェクトは nil ではありません。マッピングキーが別のアドレスであるのはなぜですか?? コードはiOS 5で完全に機能しました....

4

2 に答える 2

3

CALayer は NSCopying プロトコルを実装していないため、キーとして使用できません。CALayer のアドレスを使用して NSNumber に変換するか、代わりに CALayer の name プロパティを使用できます。

于 2012-09-20T04:43:54.420 に答える
1

オブジェクト アドレスをキーとして使用する場合は、そのアドレスを含むオブジェクトを作成する必要があります。例えば

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

しかし、私はあなたがそれをすることを強く思いとどまらせます. 代わりに、特定のオブジェクト アドレスに依存せずに、適切なキーを用意する必要があります。

于 2012-09-20T04:59:46.663 に答える