您是否尝试过在 NSKeyedUnarchiver 上实现一个类别并以这种方式捕获密钥?快速实施和调查,您会发现关键是“UIResourceName”。但是请记住,keyed unarchiver 仅返回当前解码范围内的 key 对象。这意味着您无法从根中查询此键,您必须深入挖掘对象层次结构。
下面是记录任何链接资源的代码。如何使用它取决于您。它还会记录 UIImage 何时被解码。如果你愿意,你可以在这里返回你自己的课程。
@interface NSKeyedUnarchiver (MyKeyedUnarchiver)
@end
@implementation NSKeyedUnarchiver (MyKeyedUnarchiver)
- (id) mydecodeObjectForKey:(NSString *)key
{
id obj = [self mydecodeObjectForKey:key];
if ( [key isEqualToString:@"UIResourceName"] )
NSLog(@"The linked resource name is: %@", obj);
return obj;
}
- (Class) myclassForClassName:(NSString *)codedName
{
if ( [codedName isEqualToString:@"UIImageNibPlaceholder"] )
NSLog(@"Decoding a UIImage");
return [self myclassForClassName:codedName];
}
+ (void) load
{
SEL origM = @selector( decodeObjectForKey: );
SEL newM = @selector( mydecodeObjectForKey: );
method_exchangeImplementations( class_getInstanceMethod( self, origM ), class_getInstanceMethod( self, newM ) );
origM = @selector( classForClassName: );
newM = @selector( myclassForClassName: );
method_exchangeImplementations( class_getInstanceMethod( self, origM ), class_getInstanceMethod( self, newM ) );
}
@end
希望这可以帮助。