objective-c - Xcode:图像数组无法在设备上实例化

标签 objective-c ios xcode

我有一个应用程序在模拟器上运行良好,但在我的 iPod Touch(第 4 代)上运行失败,我想知道原因。失败的部分是一个简单的交互式菜单,它在 UINavigationController 的根部显示六张图片,然后推送一个实例化食物图像数组的 viewController,创建一个并排保存所有图像的 View -side,并将查看区域移动到与在 Root View 中单击的图像相关的图像上。当我在设备上运行它时,该数组仅使用指向两个图像的指针进行实​​例化,并且当使用该数组并排创建图像时会引发异常。

//code from the pushed view controller
- (void)setupScrollView:(UIScrollView*)scrMain {
    // we have 6 images here.
    // we will add all images into a scrollView & set the appropriate size.
    NSMutableArray *array = [NSArray arrayWithObjects:
                        [UIImage imageNamed:@"shrimpquesadilla.jpg"],
                        [UIImage imageNamed:@"pulledpork.jpg"],
                        [UIImage imageNamed:@"filetMignon.jpg"],
                        [UIImage imageNamed:@"Reuben.jpg"],
                        [UIImage imageNamed:@"cajunshrimp.jpg"],
                        [UIImage imageNamed:@"primerib.jpg"], nil];
    NSLog(@"stuff: %@", array);
    for (int i=1; i<=6; i++) {
        UIImage *image = [array objectAtIndex:(i-1)];
        UIImageView *imgV = [[UIImageView alloc] 
            initWithFrame:CGRectMake((i-1)*scrMain.frame.size.width, 
            0, scrMain.frame.size.width, (scrMain.frame.size.height - 90))];
        imgV.contentMode=UIViewContentModeScaleToFill;
        [imgV setImage:image];
        imgV.tag=i+1;
        [scrMain addSubview:imgV];
    }
    [scrMain setContentSize:CGSizeMake(scrMain.frame.size.width*6, 
         scrMain.frame.size.height)];
    [scrMain scrollRectToVisible:CGRectMake(self.count*scrMain.frame.size.width, 
         0, scrMain.frame.size.width, scrMain.frame.size.height) animated:YES];
}

通过模拟器运行时 NSLog 的输出:

2012-08-20 09:51:23.812 DemoTabbed[1545:11603] stuff: (
    "<UIImage: 0x7931150>",
    "<UIImage: 0x6e63270>",
    "<UIImage: 0x6e67700>",
    "<UIImage: 0x6e68040>",
    "<UIImage: 0x6e5c700>",
    "<UIImage: 0x6e64210>"
)

以及在设备上运行时的输出:

2012-08-20 10:26:50.211 DemoTabbed[2128:707] stuff: (
    "<UIImage: 0x197e20>",
    "<UIImage: 0x181270>"
)

然后是索引越界的标准错误。我不知道它是否相关,但我的两个图标也没有加载到设备上,尽管它们可以在模拟器上运行。如果您需要更多代码,或者如果您对应用程序或其行为有任何疑问,请告诉我,我很乐意添加更多代码。

编辑:我尝试重新排列图像在数组中实例化的顺序,但没有任何改变。输出 STLl 显示数组仅指向两个图像。

最佳答案

iOS 有一个区分大小写的文件系统。 @"filetMignon.jpg"文件中存在大小写问题,导致它解析为 nil 图像并提前结束数组元素。

要解决此问题,请确保在加载图像时以相同的大小写命名图像(更好的办法是始终使用小写图像名称)。

这在模拟器上不是问题,因为 OS X 使用的是不区分大小写(在 99% 的情况下)的文件系统,这意味着,@"filetMignon.jpg"和 @"filetmignon.jpg"将解析为同一个文件。

关于objective-c - Xcode:图像数组无法在设备上实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12040597/

相关文章:

ios - EXC_BAD_ACCESS 在 dispatch_async 中使用 "freed"self 时

iphone - 如何在适用于 IOS 6 的 Google map API 中使用委托(delegate)

ios 9.2 预测TouchesForTouch : No documentation

iphone - ARC 释放子类 NSObject,但不释放自定义 NSObject

ios - 嵌入容器 View 中的 SWIFT UINavigationController

objective-c - 防止 `performSelectorInBackground:` 运行两次?

objective-c - 用于大图像的 CIFilter inputIntensity slider

ios - mergeChangesFromContextDidSaveNotification 消耗内存

JSON后台处理和本地通知

ios - 如何在 Swift 中使用 SKPSMTPMessageDelegate 协议(protocol)?