NSImage无法设置名称

时间:2015-06-27 11:28:07

标签: macos cocoa nsimage

我从面板中拍摄图像,指定名称并将其放入数组中,之后。

然而,当我拍摄图像超过1次(相同图像)时,我遇到了问题,名称属性总是为零

这是代码

            for (int i =0 ; i < [[panel URLs]count]; i++)
            {
                NSImage * image = [[NSImage alloc]initWithContentsOfURL:[[panel URLs]objectAtIndex:i]];
                if (image)
                {
                    NSString * fileName = [[[panel URLs]objectAtIndex:i]lastPathComponent];
                    [image setName:fileName];//Sets nil :'( when same image opened multiple times (((((

                    NSLog(@"The file name is %@",fileName);//But the filename is not will and the NSLog is good ...
                    [_imagesArray addObject:image];
                }
            }

根据setName: documentation,这似乎是正常行为:

  

讨论

     

如果接收者已经注册了不同的   name,此方法取消注册另一个名称。如果是不同的图像   已经在aString中指定的名称下注册了这个方法   没有做任何事情并且返回NO。

     

使用此方法命名图像时,通常不会这样做   在您指定的名称中包含文件扩展名。那样,你   可以轻松区分您明确命名的图像和   那些你想从应用程序包中加载的人。有关的信息   用于搜索图像的规则,以及有关图像的信息   命名图像的所有权政策,请参见imageNamed:方法。

但即使在我按照以下方式执行clearFunction之后

- (void)clearImages
{
    _imagesArray = nil;
    [_imagesGridCollectionView setContent:_imagesArray];
    [_imagesGridCollectionView setNeedsDisplay:YES];
    _imagesArray = [[NSMutableArray alloc]init];
}

在这个明确的方法之后,我会选择之前选择的图像 并且没有设置名称...

我的问题是:

清除图像后,如何强制下一个图像取名,并取消注册以前的图像 - &gt;(我不需要它们,因为我用清晰的方法删除它们)。

编辑:

为了清除NSImages的名称缓存

我补充说:

- (void)clearImages
{
     for(NSImage *image in _imagesArray)
     {
         [image setName:nil];
     }
    _imagesArray = nil;
    [_imagesGridCollectionView setContent:_imagesArray];
    [_imagesGridCollectionView setNeedsDisplay:YES];
    _imagesArray = [[NSMutableArray alloc]init];
}

0 个答案:

没有答案