具体来说,我正在尝试找到图像路径.这将是一个非常有用的东西能够得到,并且据我发现没有人知道如何.我已经查看了生成的nib文件中的密钥,我可以在那里看到图像URL(test.jpg),但找不到获取它的密钥.键“UI
Image”返回实际已经构造的图像(通过initWithCGImageStored构建:(CGImageRef)cgImage scale:(CGFloat)scale orientation:(UIImageOrientation)orientation和一个神秘的UIKit函数调用GetimageAtPath,它调用上面提到的init调用),所以不是很有帮助.
我也尝试使用NSKeyedArchiver将UIImageView写入磁盘,这些值似乎都没有正确,也没有test.jpg值存在.
如果没人能解决这个问题 – 任何人都知道如何在二进制文件中读取文本?我可以通过nib读取并解析URL,这比什么都没有好,但无论我尝试什么格式,Nsstring的构造函数都会失败.
解决方法
您是否尝试在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,newM ) ); } @end
希望这可以帮助.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。