[__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

NSArrayM 中的异常 insertObject:atindex