菜鸟教程小白 发表于 2022-12-13 11:42:55

ios - 使用 subview 取消归档 UIImageView


                                            <p><p>我有点疯狂地尝试归档和取消归档一个 UIImageView,它有许多 subview ,这些 subview 是从 UIImageView 派生的自定义 View 。这是我所做的:</p>

<p>为项目添加一个类别以允许 UIImage 不符合 NSCoding 的事实:</p>

<pre><code>#import &#34;UIImage-NSCoding.h&#34;
#define kEncodingKey @&#34;UIImage&#34;

@implementation UIImage(NSCoding)

- (id)initWithCoder:(NSCoder *)decoder
{
    if ((self = ))
    {
      NSData *data = ;
      self = ;
    }      
    return self;
}

- (void)encodeWithCoder:(NSCoder *)encoder
{
    NSData *data = UIImagePNGRepresentation(self);
    ;
}

@end
</code></pre>

<p>我正在归档的 UIImageView 是我的主视图 Controller 的一个属性,称为“背景”。我这样保存:</p>

<pre><code>NSData *dataToSave = ;
;
</code></pre>

<p>然后我像这样解压它:</p>

<pre><code>NSData *savedData = ;   
UIImageView *restoredImageView = ;
self.background.image = restoredImageView.image; // this works - archived image is displayed
</code></pre>

<p>现在我想让我的 subview (或至少其中一个!)与未归档的根对象一起显示:</p>

<pre><code>NSLog(@&#34;Subviews: %d&#34;, ); // this tells me my subviews have been archived along with the root object
NSLog(@&#34;Subview 0: %@&#34;, ); // and they exist as expected

NSLog(@&#34;Subviews: %d&#34;, ); // at this point no subviews are present
]; // subview is not visible on screen
NSLog(@&#34;Subviews: %d&#34;, ); // count is one, but where is it?

ORUImageView *oru = [ init]; // I try creating the subview myself
oru = ;
; // it still doesn&#39;t show on screen
; // makes no difference

NSLog(@&#34;String: %@&#34;, oru.testString); // this correctly logs the test string I added to my custom class
</code></pre>

<p>这是我添加到我的 ORUImageView 子类的内容:</p>

<pre><code>- (void)encodeWithCoder:(NSCoder *)aCoder
{
    ;   
    ;
    ; // not sure if this is needed
}


- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = ;
    ];
    ]; // not sure if this is needed
    return self;
}
</code></pre>

<p>我已经尝试过使用和不使用 image 属性的编码。 </p>

<p>我怀疑问题与此属性有关,因为我清楚地将 subview 添加到未归档 View 中 - 它只是不可见!我觉得图像属性没有被设置,但我自己找不到设置它的方法,也找不到任何告诉我正确方法的东西。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>嗯。我刚试过这个:</p>
<pre><code>- (IBAction)doButton1:(id)sender {
    theData = ;
    ;
    iv = nil;
}

- (IBAction)doButton2:(id)sender {
    iv = ;
    ;
}
</code></pre>
<p>它工作 - 与一个普通的 UIImageView。所以现在我想我不明白你在说什么;似乎 UIImageView <em>is</em> 已经与其图像一起存档。因此,您必须尝试解决其他问题。但我不明白问题出在哪里。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 使用 subview 取消归档 UIImageView,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/9334453/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/9334453/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 使用 subview 取消归档 UIImageView