Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XCode 6/Swift的iOS 7.1中未显示的图像_Xcode_Ios7_Swift - Fatal编程技术网

使用XCode 6/Swift的iOS 7.1中未显示的图像

使用XCode 6/Swift的iOS 7.1中未显示的图像,xcode,ios7,swift,Xcode,Ios7,Swift,我有一个ObjC代码: [self.myButton setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@-button", self.myObject.name]] forState:UIControlStateNormal]; 这对以下组合非常有效: XCode 5,iOS 7.1 XCode 6,iOS 7.1 XCode 6,iOS 8 但当我将

我有一个ObjC代码:

[self.myButton setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@-button", self.myObject.name]]
                         forState:UIControlStateNormal];
这对以下组合非常有效:

  • XCode 5,iOS 7.1
  • XCode 6,iOS 7.1
  • XCode 6,iOS 8
但当我将项目的一个类移植到Swift时——这个类与代码中发生的任何事情无关——图像不会显示在iOS 7.1的XCode 6中。它确实适用于XCode 6和iOS 8

我完成了将整个项目移植到Swift的工作,现在代码如下所示:

self.myButton.setBackgroundImage(
    UIImage(named:self.myObject.name + "-button"),
    forState: UIControlState.Normal
)
在iOS 7.1上,它仍然不开心。仍然没有图像。(自定义图标可以工作。)是的,我知道这只是测试版软件,可能只是一个bug?但我只是想知道是否有人有解决方案或见解


大约一周前我才开始使用XCode和ObjC(令人惊讶的是,ObjC现在已经被弃用了!),所以可能是我遗漏了一些东西,但由于它在ObjC和Swift+iOS8中工作,所以看起来可能是一个bug。

我想您正在模拟器上测试它。确保将所需图像复制到7.1捆绑包。要做到这一点,请检查
copy resources bundle
build stage,或者在
~/Library/Application Support/iPhone Simulator/
中手动检查不同模拟器的应用程序bundle,我通过不使用资产库来存储图像,成功地克服了这一问题

使用“旧式命名”将图像添加到项目中,如Image.png和Image@2x.png,然后在文件名中不带任何扩展名的情况下加载它们,如下所示:

let myImage = UIImage(named:"Image")
指出iOS7不支持
xcasets
捆绑包。此外,我发现在您的项目中很难摆脱资产捆绑包。如果您的图像与以前在捆绑包中的图像具有相同的名称,则可能会导致命名冲突(您可能需要相同的名称,因此不必在代码/IB中的任何地方重命名图像)

这里有一个解决方法:

  • .xcsets
    图像包中的每个图像复制到一个新目录(我们称之为
    Images/
    )。请参阅下面的脚本,以简化此操作
  • 删除您的
    .xcsets
    捆绑包。(令人惊讶的是,从项目中删除它是不够的。在我的测试中,如果
    .xcasets
    捆绑包与Xcode项目或相关源位于同一目录中的任何位置,它将被复制进来。或者,您可以删除
    .xcasets
    扩展名)
  • 将所有图像文件添加到Xcode项目中
  • 清洁(cmd+shift+k)
  • 从目标设备或模拟器中删除应用程序
  • 安装并运行
  • 为了减少步骤1的繁琐,我编写了一个脚本,将图像从
    .xcsets
    捆绑包复制到您选择的目录中:

    固定在

    来自最小部署目标为iOS 7或OS X的项目中的资产目录的映像 10.9在iOS 8和OS X 10.10上运行时可用,现在也可以在iOS 7和OS X上运行 10.9. (17029658)


    对我来说,这是因为我突然将jpg图像添加到图像资产中。只需将其重新保存为png,所有图像都可以正常工作。我遇到了一个问题,xcassets中的一些图像可以正常工作,而另一些图像不能正常工作(仅适用于iOS 7.1)。
    我通过删除有问题的图像集并创建具有不同名称的新图像集来解决此问题。

    如果您试图使用外部捆绑包,将正确的PNG图像存储在“旧式”文件夹或xcassets中,则在iOS 7上运行的应用程序将无法访问这些图像

    我尝试了另一个答案中的建议,在外部捆绑包中添加图像的“旧式”文件夹路径,但这对我不起作用。我的解决方案(适合我的场景)是在外部捆绑包中为nib中的资源公开一个出口。这允许主应用程序设置一个可访问的图像。无论这是一个bug还是仅仅是在使用iOS 7的外部捆绑包中包含的NIB时的一个约束,随着使用的逐渐减少,问题将变得不那么重要


    PS:在iOS 8上运行的应用程序可以访问外部捆绑包中的图像,所以选择您的毒药来支持iOS 7。

    事实上,它既在7.1模拟器上,也在我的7.1设备上。但是现在检查一下您所说的……我在主项目窗口中看到了复制包资源,Images.xcsets就在那里。它必须是,对吧,否则它不会出现在iOS 8中?我确实在iOS 7.1和iOS 8设备中看到一个Assets.car,它是完全相同的文件(选中md5)。所以这似乎不是问题所在。显然,在XCode 6中,它位于iOS 8的~/Library/Developer/CoreSimulator/Devices/DEVICE\u ID/data/Containers/Bundle/Application/APP\u ID/APP\u NAME.APP/和iOS 7.1的~/Library/Developer/CoreSimulator/Devices/DEVICE\u ID/data/Applications/APP\u ID/APP\u NAME.APP/中。我已经看到它解决了Swift代码的一些问题…谁说Objective-C不受欢迎?Objective-C没有被反对,你现在有两个不同的选项来编写你的iOS/OSX应用程序。Objective-C说“谢谢你,我仍然很好,我一点也不被反对!”。Pascal在Mac OS上也没有被反对过,是吗?我不是说真的。但文字在墙上。这将需要几年的时间,但在某个时候,没有人会在ObjC中进行新的开发。我找到的唯一解决方案也是完美的!刚刚下载了XCode 6 Beta 2,将我的PNG添加到资产目录,在我的按钮中使用了图像,所有内容都正确地显示在我的iOS 7设备上。带有XCode 6 Beta 2的iOS 8模拟器仍然无法工作,但在iOS 7模拟器上,XCode 6 Beta 2可以工作所有这些(iOS 7、iOS 7.1、iOS 8)都可以在XCode 6 Beta 2中为我工作。尝试创建新项目并在那里进行测试。如果png文件没有添加到资源目录中,Xocde 6 beta 6中的损坏图像将无法工作?荒谬。我也做了同样的事情,结果成功了
    mkdir Images
    ./xcasset_exporter.py MyProject/Images.xcassets Images