[__NSArrayM insertObject:atIndex:]:对象不能为 nil' - 图片
Posted
技术标签:
【中文标题】[__NSArrayM insertObject:atIndex:]:对象不能为 nil\' - 图片【英文标题】:[__NSArrayM insertObject:atIndex:]: object cannot be nil' - Image[__NSArrayM insertObject:atIndex:]:对象不能为 nil' - 图片 【发布时间】:2014-02-18 21:27:42 【问题描述】:我正在开发一个小游戏。
在游戏中,用户可以选择自己的图片,在游戏中使用。
当我选择图片并将它们保存到应用程序时,它工作正常。
但是当我将图片加载到游戏中时,我得到了这个错误
[__NSArrayM insertObject:atIndex:]: object cannot be nil
我认为这是因为应用程序找不到图片。但我不明白为什么。 :-D
是的,我是 Xcode 的新手 :-D
我的代码是这样的
- (void)loadCellImages
[self unloadCellImages];
for (int i=1;i<(totalcolors+1);i++)
imageSaveLoad *imgSL = [[imageSaveLoad alloc] init];
[cellImages addObject:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@-%d",[imgSL loadImage:@"Photo-"],i] ofType:@"png"]]];
我从这里加载并保存图片:
imageSaveLoad.m
//saving an image
- (void)saveImage:(UIImage*)image forKey:(NSString*)imageName
NSData *imageData = UIImagePNGRepresentation(image);
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = paths[0];
NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", imageName]];
[fileManager createFileAtPath:fullPath contents:imageData attributes:nil];
NSLog(@"image saved %@",imageName);
//removing an image
- (void)removeImage:(NSString*)fileName
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = paths[0];
NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", fileName]];
[fileManager removeItemAtPath: fullPath error:NULL];
NSLog(@"image removed");
//loading an image
- (UIImage*)loadImage:(NSString*)imageName
// NSLog(@"load %@",imageName);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = paths[0];
NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", imageName]];
return [UIImage imageWithContentsOfFile:fullPath];
【问题讨论】:
根据您的描述,很难帮到您:您在哪一行收到错误消息?如果您不知道该行,设置一个异常断点(在 Xcode 断点导航器中,单击左下角的 + 并启用它),您的应用程序将在错误发生的地方停止。然后应该可以找出为什么要存储在 NSMUtableArray 中的对象为 nil。 【参考方案1】:您正在将图像保存到 NSDocumentDirectory
,但尝试从您的主包中加载:
[cellImages addObject:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@-%d",[imgSL loadImage:@"Photo-"],i] ofType:@"png"]]];
你可能只是想要:
[cellImages addObject:[imgSL loadImage:[NSString stringWithFormat:@"Photo-", i]]];
您将mainBundle
用于与您的应用捆绑的图像(和资源)。
编辑:
为了确保您的图像被正确保存,您还应该检查createFileAtPath:contents:attributes:
的返回BOOL
。
【讨论】:
是的,你刚刚拯救了我的一天,现在它与 [cellImages addObject:[imgSL loadImage:[NSString stringWithFormat:@"Photo-", i]]];我必须学习:-D以上是关于[__NSArrayM insertObject:atIndex:]:对象不能为 nil' - 图片的主要内容,如果未能解决你的问题,请参考以下文章
NSFetchedResultsController -[__NSArrayM insertObject:atIndex:]:对象不能为 nil
iOS [__NSArrayM insertObject:atIndex:]:对象不能为 nil - 太烦人了
Facebook JSON 提要 - __NSArrayM insertObject:atIndex:]:对象不能为 nil
UITableView insertRowsAtIndexPaths 抛出 __NSArrayM insertObject:atIndex:'object cannot be nil' 错误
Objective-C -[__NSArrayM insertObject:atIndex:]: 索引 2 超出边界 [0 .. 0]' 用于 UITextField