- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我为 OS X 创建了第一个 Cocoa 应用程序,并很高兴最终将其提交到 iTunes connect。只是因为应用程序崩溃而未获得批准。我很难弄清楚所有事情,直到这里,现在我终于陷入困境,不知道如何解决以下问题:
首先,该应用程序在简单构建和运行时工作得非常好。仅当应用程序存档时才会发生神秘的崩溃。这就是为什么我之前没有注意到现金并将无法运行的应用程序提交到 iTunes Connect 的原因。
我符号化了崩溃日志,应用程序崩溃了(对我来说)没有任何意义。这是相关的(剥离的)代码。
我有一个类Countries
,它除了从核心数据(SQLite)加载一组项目之外没有什么作用:
//
// Countries.swift
//
import Cocoa
let appCountries = Countries()
class Countries {
lazy var items: [Country] = {
if let list = self.load() {
return list
}
else {
return []
}
}()
func load() -> [Country]? {
if let countryList = coreDataHelper.fetchEntitiesForClass("Country") as? [Country] {
return countryList
}
else {
return nil
}
}
}
Country
是我的数据模型的实体。 coreDataHelper 类仅包含用于创建数据存储、托管对象上下文和获取实体的所有相关方法。该代码不相关,但在同一应用程序的许多其他用例中肯定可以工作。假设 coreDataHelper.fetchEntitiesForClass() 返回实体的所有项目。
现在我有一个模态窗口(beginSheet
,我通过以下 this tutorial 实现),它包含一个 NSPopUpButton
并且我正在填充所有 Country
元素添加到此 PopUp:
//
// ModalWindow.swift
//
import Cocoa
class ModalWindow: NSWindowController {
var mainW: NSWindow = NSWindow()
let locale = NSLocale.currentLocale()
@IBOutlet weak var countries: NSPopUpButton!
override init() {
super.init()
}
override init(window: NSWindow!) {
super.init(window: window)
//Initialization code here.
}
required init?(coder: (NSCoder!)){
super.init(coder: coder);
}
override func windowDidLoad() {
super.windowDidLoad()
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
}
//method called to display the modal window
func beginSheet(mainWindow: NSWindow){
self.mainW = mainWindow
NSApp.beginSheet(self.window!, modalForWindow: mainWindow, modalDelegate: self, didEndSelector:nil, contextInfo: nil)
if let countryList = appCountries.items as NSArray? {
for country in countryList as [Country] {
if let localized = self.locale.displayNameForKey(NSLocaleCountryCode, value: country.name) {
self.countries!.addItemWithTitle(localized)
}
}
}
}
//method called to slide out the modal window
func endSheet(){
NSApp.endSheet(self.window!)
self.window!.orderOut(mainW)
}
}
符号化的崩溃日志告诉我,崩溃确实发生在我循环 countryList
的行中:
for country in countryList as [Country] {
崩溃日志摘录:
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: EXC_I386_GPFLT
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libobjc.A.dylib 0x00007fff8b863064 objc_retain + 20
__TFC8MyApp18Modalwindow13windowDidLoadfS0_FT_T_ ModalWindow.swift:35
2 com.apple.AppKit 0x00007fff95dcee07 -[NSWindowController _windowDidLoad] + 586
据我了解,这是一个内存访问问题。但我不明白为什么。问题是,当我 NSLog
countryList
它开始工作:
if let countryList = appCountries.items as NSArray? {
NSLog("[TEST] %@", countryList)
for country in countryList as [Country] {
//...
}
}
我尝试以其他方式与countryList
进行交互,但其他一切都会在存档时导致崩溃,除非我首先像上面那样NSLog
它。即使这样也会崩溃:NSLog("[TEST] %@", "\(countryList)")
,尽管根据我的理解它应该是完全相同的。再次强调,只有当应用程序被存档以准备将其发送到 iTunes connect 时,才会发生这种情况。简单构建和运行时零问题。
我很想简单地将 NSLog
留在那里并以这种方式发送,但我想了解发生了什么以及如何适本地解决它。
编辑:刚刚安装了更新 Xcode 6.2,并且遇到了与 6.1.1 相同的问题。
最佳答案
我尝试了调试
和发布
之间不同的所有build设置。看起来这是一个 Swift 编译器问题。当我将优化级别
从最快
更改为无
时,问题就消失了。 Fastest
和 Fastest, Unchecked
都会产生上述错误。 没有
有效。
现在我已经确定了问题,我可以搜索并找到更好的解决方法。这个问题在某种程度上与一般的数组有关,我在网上发现了一些关于它的提及。一个简单的解决方法是将数组元素转换为 AnyObject
,如下所示:
for country in countryList as [AnyObject] as [Country] {
//...
}
而不是
for country in countryList as [Country] {
//...
}
在另一个问题中找到了这个:Swift optimization level breaks converting NSArray to Array
关于xcode - 仅在存档的 Cocoa 应用程序中内存访问崩溃(EXC_BAD_ACCESS/EXC_I386_GPFLT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29003323/
我正在通过 labrepl 工作,我看到了一些遵循此模式的代码: ;; Pattern (apply #(apply f %&) coll) ;; Concrete example user=> (a
我从未向应用商店提交过应用,但我会在不久的将来提交。 到目前为止,我对为 iPhone 而非 iPad 进行设计感到很自在。 我了解,通过将通用PAID 应用放到应用商店,客户只需支付一次就可以同时使
我有一个应用程序,它使用不同的 Facebook 应用程序(2 个不同的 AppID)在 Facebook 上发布并显示它是“通过 iPhone”/“通过 iPad”。 当 Facebook 应用程序
我有一个要求,我们必须通过将网站源文件保存在本地 iOS 应用程序中来在 iOS 应用程序 Webview 中运行网站。 Angular 需要服务器来运行应用程序,但由于我们将文件保存在本地,我们无法
所以我有一个单页客户端应用程序。 正常流程: 应用程序 -> OAuth2 服务器 -> 应用程序 我们有自己的 OAuth2 服务器,因此人们可以登录应用程序并获取与用户实体关联的 access_t
假设我有一个安装在用户设备上的 Android 应用程序 A,我的应用程序有一个 AppWidget,我们可以让其他 Android 开发人员在其中以每次安装成本为基础发布他们的应用程序推广广告。因此
Secrets of the JavaScript Ninja中有一个例子它提供了以下代码来绕过 JavaScript 的 Math.min() 函数,该函数需要一个可变长度列表。 Example:
当我分别将数组和对象传递给 function.apply() 时,我得到 NaN 的 o/p,但是当我传递对象和数组时,我得到一个数字。为什么会发生这种情况? 由于数组也被视为对象,为什么我无法使用它
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界. 这篇CFSDN的博客文章ASP转换格林威治时间函数DateDiff()应用由作者收集整理,如果你
我正在将列表传递给 map并且想要返回一个带有合并名称的 data.frame 对象。 例如: library(tidyverse) library(broom) mtcars %>% spl
我有一个非常基本的问题,但我不知道如何实现它:我有一个返回数据框,其中每个工具的返回值是按行排列的: tmp<-as.data.frame(t(data.frame(a=rnorm(250,0,1)
我正在使用我的 FB 应用创建群组并邀请用户加入我的应用群组,第一次一切正常。当我尝试创建另一个组时,出现以下错误: {"(OAuthException - #4009) (#4009) 在有更多用户
我们正在开发一款类似于“会说话的本”应用程序的 child 应用程序。它包含大量用于交互式动画的 JPEG 图像序列。 问题是动画在 iPad Air 上播放正常,但在 iPad 2 上播放缓慢或滞后
我关注 clojure 一段时间了,它的一些功能非常令人兴奋(持久数据结构、函数式方法、不可变状态)。然而,由于我仍在学习,我想了解如何在实际场景中应用,证明其好处,然后演化并应用于更复杂的问题。即,
我开发了一个仅使用挪威语的应用程序。该应用程序不使用本地化,因为它应该仅以一种语言(挪威语)显示。但是,我已在 Info.plist 文件中将“本地化 native 开发区域”设置为“no”。我还使用
读完 Anthony's response 后上a style-related parser question ,我试图说服自己编写单体解析器仍然可以相当紧凑。 所以而不是 reference ::
multicore 库中是否有类似 sapply 的东西?还是我必须 unlist(mclapply(..)) 才能实现这一点? 如果它不存在:推理是什么? 提前致谢,如果这是一个愚蠢的问题,我们深表
我喜欢在窗口中弹出结果,以便更容易查看和查找(例如,它们不会随着控制台继续滚动而丢失)。一种方法是使用 sink() 和 file.show()。例如: y <- rnorm(100); x <- r
我有一个如下所示的 spring mvc Controller @RequestMapping(value="/new", method=RequestMethod.POST) public Stri
我正在阅读 StructureMap关于依赖注入(inject),首先有两部分初始化映射,具体类类型的接口(interface),另一部分只是实例化(请求实例)。 第一部分需要配置和设置,这是在 Bo
我是一名优秀的程序员,十分优秀!