我从面板中拍摄图像,指定名称并将其放入数组中,之后。
然而,当我拍摄图像超过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];
}