- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
还有其他人在使用 XCode 4.2(lion) 或 4.0.2 中的 4.3 iPhone 模拟器时遇到问题吗?
我的代码长期有效、经过测试并且在生产中使用 block 来指定完成操作。例如,我使用 UIView 动画淡出标签顶部的一些文本,如下所示:
[UIView animateWithDuration: 0.0
delay: 0.0
options: (UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionTransitionNone)
animations: ^{
videoTextLabel1.alpha = 0.0;
videoTextLabel2.alpha = 0.0;
videoTextLabel3.alpha = 0.0;
}
completion: ^(BOOL completed) {
[self fadeInNextMeditationLine: 0];
}];
我在模拟器中可靠地获得了 EXEC_BAD_ACCESS - 在设备上从来没有问题。
在另一个地方,我使用自己的完成 block 实现在用户关闭模态视图后采取行动。
ValuePickerController *controller =
[[ValuePickerController alloc]
initWithNibName: kValuePickerXIBFileName
bundle: nil
labelText: @"prompt")
value: alertSettings.frequency
minimumValue: kMinimumFrequency
maximumValue: kMaximumFrequency
completionBlock: ^(NSInteger newValue) {
[self updateFrequencyText: newValue];
[self changeFrequencySetting];
}];
没有 NSZombies 出现,分析器运行干净。此外,此代码已投入生产 6 个月,没有发生任何崩溃。
还有其他人遇到这个问题吗?自从我升级 XCode 以来,它一直在发生。
最佳答案
据我所知,这是一个只影响 4.3 模拟器的已知问题。 4.2 和预发布的 5.0 版本似乎没有出现这个问题。然而,现在 Lion 已经出局,这是一个更大的问题,因为 Xcode 的最新通用发行版仅支持 4.3 模拟器,因此会出现此问题。
真正的原因在于 Blocks 和 ObjC 运行时之间的钩子(Hook)。 block 本身会工作得很好,但任何尝试在它们上调用 Objective-C 消息都会导致段错误。这是因为 Blocks 运行时包含一些对相关 ObjC 类的未初始化引用,并且在 iOS 4.3 模拟器上,这些在 ObjC 运行时加载时从未被初始化(它们仅在 ObjC 被使用时才被初始化——所以Blocks 运行时不依赖于加载 Foundation)。您可以在运行时通过在调试器中查看 _NSConcreteStackBlock
、_NSConcreteGlobalBlock
和 _NSConcreteMallocBlock
的值来检查这一点。在 4.2 模拟器或设备上,这些值将不为零,但在 4.3 模拟器上它们仍然为零。
我有一个可能的解决方案,如有必要,我会链接到这里,但首先我会尝试从 Apple 那里获取一些信息,了解他们是否已在发布的风口浪尖上进行修复,或者他们是否需要更多信息信息等
更新:问题已解决
我进行了大量挖掘,最终归结为:不要使用 -weak_library
对 libSystem.dylib 进行弱链接。相反,您根本不应该弱链接 libSystem(我在支持 iOS 3.1.x 时必须这样做,因为编译器在某些特定于 iOS4 的条件代码中生成的 Blocks 代码在启动时导致链接错误,即严重崩溃),或者您应该改用 -weak lSystem
,模拟器可以更好地理解它。
当您在 iOS 模拟器中运行时,您可以查看加载的库(在 Xcode 中:'Product->Debug->Shared Libraries…'),如果您搜索“Blocks”,您将看到两个项目: libsystem_blocks.dylib
和 libsystem_sim_blocks.dylib
。后者是由 CoreFoundation 链接的,它为 Blocks 运行时初始化 ObjC 运行时胶水。但是,由于您将 libSystem
库作为一个整体进行弱链接,因此通常被模拟器版本覆盖的符号(因为它加载晚于 libSystem)实际上在运行时从 第一个 实现它们的库。这意味着您会找到 _NSConcreteGlobalBlock
和 friend 的系统版本,它们不是由模拟器的自定义 ObjC 运行时初始化的版本。
有关该问题的(很多!)更多信息,并查看我是如何追踪到它的,请查看我创建的线程 on the Apple Developer Forums .
关于objective-c - 在 iPhone Simulator 4.3/XCode 4.2 和 4.0.2 中使用 Blocks 会导致应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6738858/
如何从 tvOS 模拟器卸载应用程序? 我已经尝试长按图标,但没有出现“关闭按钮”。 我知道,这是一个 Beta 版本,也许将来他们会实现类似 iOS 的功能。 谢谢你。 最佳答案 方法一 从主屏幕:
我在IOS 8的Xcode-6 Beta中找不到新模拟器数据的目录 它不在 〜/图书馆/应用程序支持/ iPhone模拟器/ Where does the iPhone Simulator store
苹果的Whats new in Xcode 9声明我们可以录制模拟器视频。如何做到这一点? 最佳答案 使用命令行截取屏幕截图或录制视频: 在模拟器中启动您的应用。 打开终端。 要截取屏幕截图,请使用屏
我想构建一个通过 wifi 网络与其他设备通信的应用程序。因为我没有两台真正的 iOS 设备,所以我想在虚拟网络中连接两个 iOS 模拟器。起初我不知道如何/是否可以同时运行两个模拟器,其次我不知道如
我正在尝试模拟鼠标在窗口上的点击。我目前成功地执行了如下操作(我使用的是 Python,但它应该适用于一般的 win32): win32api.SetCursorPos((x,y)) win32api
我想在 ios6 和 ios7 模拟器上运行我的应用程序。我正在尝试安装 ios 6 模拟器,但收到此错误: Failed to install "iOS 6.1 Simulator" An unkn
尽管在实际设备上一切正常,但我想知道为什么从不回调代理 在 iOS 13 beta 5 上的模拟器上? 我在互联网上搜索了答案,但一无所获。 我为协议(protocol)实现了 3 个功能,如下所示:
在我的代码中,我犯了一些错误,将 NSNumber 分配给 NSString: self.totalLikesLabel.text=[user objectForKey:@"totalLikes"];
我使用的是 Xcode 6.1 和 iOS Simulator 8.1。运行我使用 iOS 模拟器编写的简单应用程序需要很长时间。构建过程没问题,但 iOS 模拟器将在应用程序启动前 5 分钟显示黑色
这个问题在这里已经有了答案: Is there a way to simulate multiple iphones using xcode/iphone sim? (10 个回答) 7年前关闭。 我
我旧安装的 Xcode 完全可以正常工作,但我尝试升级 Xcode 以使用 iOS 6,所以我在 Mac App Store 中下载了新版本,但我的 iOS 模拟器现在停止工作了,他告诉我他不能找到S
使用新的 Xcode 6,有时当我在模拟器之间切换时 - 我收到错误消息“模拟器正在使用 - 模拟器无法启动,因为它已经在使用中”。但是,模拟器未在使用中 - 我也没有在事件监视器中看到它。克服这个问
Iam running the latest OSX/Flutter/XCode Versions using flutter, android studio and firebase and
我已将 xcode 更新到 12.3,我收到了新错误。 找不到目标“arm64-apple-ios-simulator”的模块“Alamofire”;找到:x86_64-apple-ios-simul
xcode 9模拟器报错unable to boot the simulator launchd failed to respond mac os sierra 我试过从派生数据中删除内容、重新启动
更新到 Xcode 12 后,项目在模拟器上构建时给了我这个错误: Could not find module 'FrameworkName' for target 'arm64-apple-ios-
我正在尝试在 Windows PC 中使用 IOS Simulator/Emulator 或 iOS SDK 进行移动应用程序测试。是否可以在 Windows PC 中安装 IOS Simulator
我有一个关于如何在 Simpy 中调试的一般性问题。普通的调试工具似乎不起作用,因为一切都在事件循环中运行,您无法逐行检查代码并检查任何时间点存在的内容。 主要是,我感兴趣的是查找在特定时间存在哪些类
在我的模型中,我使用了一个使用自由导航的运输车。如果它是正确的,那么运输车就不能穿墙,奇怪的是在我的模型中,运输车在某一时刻以某种方式能够穿墙? 当我检查模拟时,他在红色圆圈部分的某处滑过墙。 (看截
我是编程新手,我想编写一个程序(仅供自用),每次运行时都会重复一组预设的键盘操作,谁能给我一些建议?是否有任何应用程序可以做到这一点? 最佳答案 有各种各样的程序可以满足您的需求。如果您使用的是 Wi
我是一名优秀的程序员,十分优秀!