Objective c 具有不可复制UIView键的NSMutableDictionary(使用CFDictionary)在iOS SDK 6上崩溃,但在5.1上正常

Objective c 具有不可复制UIView键的NSMutableDictionary(使用CFDictionary)在iOS SDK 6上崩溃,但在5.1上正常,objective-c,nsmutabledictionary,ios6,Objective C,Nsmutabledictionary,Ios6,因此,我使用TLMutableDictionaryNoncopiedKeys类别进行NSMutableDictionary发现,它允许使用不可复制的对象作为字典的键,我需要对象到对象的映射。在我被告知应用程序在iOS 6中崩溃之前,一切都很好。所以我下载了带有iOS 6的XCode 4.5进行测试,似乎CFDictionary函数存在一些问题。如果我在分类方法中将UIView作为键传递,它将崩溃: Terminating app due to uncaught exception 'NSInva

因此,我使用TLMutableDictionaryNoncopiedKeys类别进行NSMutableDictionary发现,它允许使用不可复制的对象作为字典的键,我需要对象到对象的映射。在我被告知应用程序在iOS 6中崩溃之前,一切都很好。所以我下载了带有iOS 6的XCode 4.5进行测试,似乎CFDictionary函数存在一些问题。如果我在分类方法中将UIView作为键传递,它将崩溃:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView copyWithZone:]: unrecognized selector sent to instance 0x719ff70'
来自AppCode调试器的更多详细信息:

objc_exception_throw
-[NSObject(NSObject) doesNotRecognizeSelector:]
__forwarding__
_CF_forwarding_prep_0
-[__NSDictionaryM setObject:forKey:]
-[NSMutableDictionary __addObject:forKey:]
CFDictionaryAddValue
-[NSMutableDictionary(TLMutableDictionaryNoncopiedKeys) setObject:forUncopiedKey:]
我做了一个测试项目。它在iOS5.1模拟器上运行良好,但在iOS6上崩溃

有人能解释一下吗

完整的项目是。以下是一些列表:

类别:

#import <Foundation/Foundation.h>


@interface NSMutableDictionary (TLMutableDictionaryNoncopiedKeys)

- (void)setObject:(id)anObject forUncopiedKey:(id)aKey;

@end

----------------------------------------------------------------------

#import "NSMutableDictionary+TLMutableDictionaryNoncopiedKeys.h"

@implementation NSMutableDictionary (TLMutableDictionaryNoncopiedKeys)

- (void)setObject:(id)anObject forUncopiedKey:(id)aKey
{
    CFMutableDictionaryRef selfCF = (CFMutableDictionaryRef)self;
    Boolean keyAlreadySet = CFDictionaryContainsKey(selfCF, aKey);
    if (keyAlreadySet) {
        CFDictionaryReplaceValue(selfCF, aKey, anObject);
    }
    else {
        CFDictionaryAddValue(selfCF, aKey, anObject);
    }
}

@end

我想你会发现,当iOS 6处于保密状态时,很难发表评论!但是没有什么是iOS 6特有的。。。我应该在其他地方问这个问题吗?请注意,应该有一个堆栈转储,它会直接指向错误地提供UIView的特定copyWithZone调用。@HotLicks是setObject:forUncopiedKey:call,但更准确地说,我更新了这个问题。为什么不直接将那个糟糕的字典子类化呢?这是子类化的一个合理理由…我想当iOS 6处于NDA之下时,你会发现很难评论!但是没有什么是iOS 6特有的。。。我应该在其他地方问这个问题吗?请注意,应该有一个堆栈转储,它会直接指向错误地提供UIView的特定copyWithZone调用。@HotLicks是setObject:forUncopiedKey:call,但更准确地说,我更新了这个问题。为什么不直接将那个糟糕的字典子类化呢?这是子类化。。。
#import "NSMutableDictionary+TLMutableDictionaryNoncopiedKeys.h"
...
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
UIView *key = [[UIView alloc] init];
[dict setObject:key forUncopiedKey:key];