菜鸟教程小白 发表于 2022-12-13 05:38:17

ios - 将 NSMutable 字典保存到文档时遇到问题。 UIImage 不会保存/显示


                                            <p><p>我有一个贴纸类,我正在将贴纸对象保存到 NSMutableDictionary。贴纸类如下:</p>

<pre><code>#import &#34;Sticker.h&#34;

@implementation Sticker


-(instancetype)initWithTitle:(NSString *)title stickerNO:(int)stickerNO image:(UIImage *)image {



    self=;
    if(self){

      self.title=title;
      self.stickerNO=;;
      self.image=image;
    }


    returnself;

}


//CODING METHODS//////////////


-(void)encodeWithCoder:(NSCoder *)aCoder{

    //choose what we save, these are objects
    ;
    ;
    ;


}

-(instancetype)initWithCoder:(NSCoder *)aDecoder
{

    self=;
    if(self){
      self.title=;
      self.stickerNO=;
      self.image=;
    }

    return self;



}

@end
</code></pre>

<p>字典由 StickerManager 类管理:</p>

<pre><code>@implementation StickerManager


-(instancetype)init {

    self = ;

    //load the dictionary
    NSString *path = ;
    self.stickerDictionary=;

    //if there is no dictionary create it and add the default
    if(!self.stickerDictionary) {

      NSLog(@&#34;Creating dictionary and adding default&#34;);
      self.stickerDictionary=[ init];
      ;
      ;

    }
    //if empty fill it
    else if (==0){
      NSLog(@&#34;Dictionary exists but it empty&#34;);
      ;
      ;

    }


    return self;


}


//add the stickers included in the app bundle
-(void)addDefaultStickers {

    Sticker *sticker = [ initWithTitle:@“Batman” stickerNO:1 image:];

    ;



}


-(BOOL)saveStickerDictionary{

    NSLog(@&#34;Saving stickers&#34;);
    //get the path from above
    NSString *path = ;

    return ;
}



-(NSString *)itemArchivePath
{

   //get the directory
    NSArray *documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

   //set it to a string
    NSString *documentDirectory = ;


    //here we call the file items.archive
    return ;

}



@end
</code></pre>

<p>如果当 StickerManager 为空或不存在时初始化,它将通过调用 addDefaultStickers 创建并使用默认贴纸填充字典。这适用于我在代码中的一个贴纸。我可以加载和恢复字典并使用 NSLog 检查内容。贴纸在那里,但由于某种原因 UIImage 为空,我无法显示它。我真的不知道为什么,我已经使用了 encodeWithCoder 所以它不应该工作吗?奇怪的是,如果我从 Parse.com 下载一个贴纸(我上面有一个相同的类),然后将该图像从 NSData 转换为 png 并保存它就可以了。有人可以给我一些指示,看看这里可能出了什么问题吗?谢谢</p>

<p>编辑这是我从 Parse.com 下载的代码:</p>

<pre><code>- (void)getNewStickersWithCompletionHandler:(stickerCompletionHandler)handler
{


    __weak StickerManager *weakSelf = self;
    PFQuery *stickersQuery = ;

    [stickersQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {

      if(!error) {



            for( PFObject *object in objects) {

                NSString *title = object[@&#34;title&#34;];
                int stickerNO = [ intValue];


                //DOWNLOAD IMAGE CODE
                PFFile *image = object[@&#34;image&#34;];
                [image getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {

                  if(!error){

                        UIImage *image = ;
                        Sticker *sticker = [ initWithTitle:title stickerNO:stickerNO image:image];

                        ;
                        ;
                        handler(YES,nil);

                  }

                }];//end get image block




            }//end for






      }
    }];//end download stickers block


}
</code></pre>

<p>如果我以这种方式将贴纸保存到字典中,则没有问题,我可以显示图像。这几乎与 addDefaultStickers 相同,我保存的是 UIImage 而不是保存 NSData。不知道这里有什么..</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>仅供其他人引用,问题在于没有首先将 UIImage 转换为 NSData。我将 aCoder 方法中的 UIImage 行更改为以下:</p>

<pre><code>;
</code></pre>

<p>并在aDecoder中:<code>self.image = ];</code></p>

<p>不完全理解为什么它适用于之前转换为用于 Parse 下载的 UIImage 的 NSData,但它现在仍然可以正常工作。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 将 NSMutable 字典保存到文档时遇到问题。 UIImage 不会保存/显示,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/28872973/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/28872973/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 将 NSMutable 字典保存到文档时遇到问题。 UIImage 不会保存/显示