我有一个滚动视图应用程序,它在模拟器上运行良好,但是,当安装在设备上时,当我尝试滚动一页时,它会给我一个 EXC_BAD_ACCESS 。我已经通过具有分配和泄漏的仪器运行了它,但没有任何泄漏,也没有发送僵尸消息......我只是好奇什么会导致模拟器与设备之间存在如此大的差异?由于我的符号化崩溃日志(下面部分),任何调试此问题的方法似乎都不是非常符号化。
异常类型:EXC_BAD_ACCESS (SIGBUS)
异常代码:KERN_PROTECTION_FAILURE 位于 0x0000000f
崩溃线程:0
线程0崩溃:
0 libobjc.A.dylib 0x0000286e objc_msgSend + 18
1 MyApp 0x00004fee 0x1000 + 16366
2 UIKit 0x000668f4 -[UIViewController 视图] + 104
3 MyApp 0x00009716 0x1000 + 3458
2 4 MyApp 0x0000960c 0x1000 + 34316
5 UIKit 0x0001426c -[UIScrollView setContentOffset: ] + 344
谢谢
我有一个UIViewController班级(说它是XXX).我通过代码以模态方式呈现此视图控制器.
XXX *xxx = [ [XXX alloc] init];
[self presentModalViewController:xxx animated:YES];
[xxx release];
Run Code Online (Sandbox Code Playgroud)
我想在XXX视图的顶部添加导航栏.所以我UINavigationBar在XXX的loadView方法中使用了对象.
UINavigationBar *navBar = [ [UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
[self.view addSubview:navBar];
[navBar release];
Run Code Online (Sandbox Code Playgroud)
但是,它会抛出一个错误"EXC_BAD_ACCESS".任何帮助......?
谢谢
iphone exc-bad-access objective-c uinavigationbar uiviewcontroller
我有一个自定义 UIButton 类,它为 UIButton 添加渐变和光泽效果,代码在 iOS 4 和 iOS5 模拟器上完美运行,但是当我在 iOS 5 设备上运行它时,它给了我异常 EXC_BAD_ACCESS ,异常由线 :
CGContextStrokePath(context);
Run Code Online (Sandbox Code Playgroud)
非常感谢任何帮助,这是我的代码
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGFloat actualBrightness = _brightness;
if (self.selected) {
actualBrightness -= 0.10;
}
CGColorRef blackColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0].CGColor;
CGColorRef highlightStart = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.7].CGColor;
CGColorRef highlightStop = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.0].CGColor;
CGColorRef outerTop = [UIColor colorWithHue:_hue saturation:_saturation brightness:1.0*actualBrightness alpha:1.0].CGColor;
CGColorRef outerBottom = [UIColor colorWithHue:_hue saturation:_saturation brightness:0.80*actualBrightness alpha:1.0].CGColor;
CGFloat outerMargin = 7.5f; …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我有两个视图控制器.第一个Viewcontroller是应用程序窗口的rootViewController.单击第一个ViewController中的Button时,我将第二个Viewcontroller的视图作为subView添加到第一个视图中,第二个ViewController视图中有一个Button,我的问题是当我点击该按钮时应用程序崩溃了
-(void)theCheckoutViewisExpandedwitPatient:(id)patient
{
SecondViewController *sample=[[SecondViewController alloc]init];
CGRect rect=sample.view.frame;
rect.origin.y=30;
rect.origin.x=305;
[sample.view setFrame:rect];
[self.view addSubview:[sample view]];
}
Run Code Online (Sandbox Code Playgroud) 我上传了应用程序并被拒绝说
我们发现您的应用程序在运行iOS 7的iPad上崩溃,这不符合App Store审核指南.
好吧,我上传的时间,iOS7没有启动.
崩溃报告说
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0xb1b1f20b
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libobjc.A.dylib 0x3a2f5b26 objc_msgSend + 6
1 MapKit 0x30ca46a6 -[MKMapView mapViewDidFinishLoadingTiles:] + 46
2 VectorKit 0x376bbaf4 -[VKTileSource didFinishWithNetwork] + 68
3 VectorKit 0x376bc196 __32-[VKTileSource performDownload:]_block_invoke126 + 38
4 GeoServices 0x345b6fdc ___ZNK49-[GEOTileLoaderInternal _loadedTile:forKey:info:]66__49-[GEOTileLoaderInternal _loadedTile:forKey:info:]_block_invoke3$_1clERKN8LoadItem9RequesterE_block_invoke_2 + 52
5 libdispatch.dylib 0x3a7ddd78 _dispatch_call_block_and_release + 8
6 libdispatch.dylib 0x3a7ddd64 _dispatch_client_callout + 20
7 libdispatch.dylib 0x3a7e47bc _dispatch_main_queue_callback_4CF$VARIANT$mp + 264
8 CoreFoundation 0x2fab881c …Run Code Online (Sandbox Code Playgroud) 我的iPhone应用程序崩溃在客户端设备上的ios 7.0 iphone 5s我无法弄清楚它有什么问题,我正在使用crashlytics进行崩溃报告.Crashlytics报告由于线程#9 DataDetectorsCore processToken上的错误访问而崩溃
Crashed: NSOperationQueue 0x17023e120
EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x0000000620a51e24
0 DataDetectorsCore processToken + 400
1 DataDetectorsCore _DDScannerHandleState + 344
2 DataDetectorsCore _DDScannerHandleState + 344
3 DataDetectorsCore _DDScannerHandleState + 400
4 DataDetectorsCore _DDScannerHandleState + 400
5 DataDetectorsCore _DDScannerHandleState + 400
6 DataDetectorsCore _DDScannerHandleState + 400
7 DataDetectorsCore DDScannerScanQuery + 456
8 DataDetectorsUI -[DDOperation main] + 240
9 Foundation -[__NSOperationInternal _start:] + 644
10 Foundation __NSOQSchedule_f + 76
11 libdispatch.dylib _dispatch_client_callout + 16
12 libdispatch.dylib _dispatch_async_redirect_invoke + 152 …Run Code Online (Sandbox Code Playgroud) 上下文
An SKEmitterNode是从sks文件创建的,并作为某个精灵的子项添加.该targetNode发射器被设置在现场的一些其他节点.
func launch() {
let emitterPath = NSBundle.mainBundle().pathForResource(
"trailblaze", ofType: "sks"
)!
let emitter = NSKeyedUnarchiver.unarchiveObjectWithFile(emitterPath) as SKEmitterNode
emitter.targetNode = (sprite.scene as GameScene).canvas
sprite.addChild(emitter)
}
Run Code Online (Sandbox Code Playgroud)
碰撞
崩溃只发生在64位设备上,这是一个日志:
* thread #1: tid = 0xd3127, 0x000000018a6d1194 SpriteKit`std::__1::__tree_iterator<SKCSprite*, std::__1::__tree_node<SKCSprite*, void*>*, long> std::__1::__tree<SKCSprite*, std::__1::less<SKCSprite*>, std::__1::allocator<SKCSprite*> >::find<SKCSprite*>(SKCSprite* const&) + 16, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0xbaddae9f5299becd)
frame #0: 0x000000018a6d1194 SpriteKit`std::__1::__tree_iterator<SKCSprite*, std::__1::__tree_node<SKCSprite*, void*>*, long> std::__1::__tree<SKCSprite*, std::__1::less<SKCSprite*>, std::__1::allocator<SKCSprite*> >::find<SKCSprite*>(SKCSprite* const&) + 16
frame #1: 0x000000018a6d1150 SpriteKit`unsigned long …Run Code Online (Sandbox Code Playgroud) 通过堆栈跟踪,unsafeMutableAddressor崩溃似乎发生在AppConstant.kShowOverlay从控制器访问时viewDidLoad()
我的定义AppConstant.swift如下:
struct AppConstant {\n // MARK: Properties\n static let kShowOverlay = false\n}\nRun Code Online (Sandbox Code Playgroud)\n\n以下是 crashlytics 的堆栈跟踪:
\n\nCrashed: com.apple.main-thread\n EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000000000048\n\n 0\xc2\xa0 libswiftCore.dylib\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa00x51bfc5c _TTWuRq_Ss9Indexable_GVSs5Sliceq__Ss14CollectionTypeSsFS1_10suffixFromuRq_S1__fq_Fqq_S_5Indexqq_S1_11SubSequence\n 1\xc2\xa0 MyAppModule\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa00x56fbad4 AppConstants.kShowOverlay.unsafeMutableAddressor (AppConstants.swift)\n 2\xc2\xa0 libdispatch.dylib\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa00x34ba9f13 dispatch_once_f + 62\n 3\xc2\xa0 MyApp\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa00x23e38e8 globalinit_33_D6508E60499748694DF7352631AEB836_func18 (MyViewController.swift:73)\n 4\xc2\xa0 libdispatch.dylib\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa00x34ba92cf _dispatch_client_callout + 22\n 5\xc2\xa0 libdispatch.dylib\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa00x34ba9f13 dispatch_once_f + 62\n 6\xc2\xa0 MyApp\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0 \xc2\xa0\xc2\xa0\xc2\xa00x2383e88 MyViewController.setupCollectionView(MyViewController) -> () -> () (MyViewController.swift:530)\n 7\xc2\xa0 MyApp\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa00x29f0a3c MyViewController.viewDidLoad(MyViewController) -> () -> () (MyViewController.swift:59)\nRun Code Online (Sandbox Code Playgroud)\n\n我无法重现此崩溃,只能从 crashlytics 获取堆栈跟踪。
\n\n …var soundPoolLabel: UILabel {
let label = UILabel(frame: CGRect(x: 20, y: 90, width: 540, height: 94))
label.text = "SoundPool"
label.textColor = UIColor.black
label.font = UIFont(name: "Bodoni 72 Oldstyle", size: 80)
let attributedString = NSMutableAttributedString(string: label.text!)
attributedString.addAttribute(kCTKernAttributeName as NSAttributedStringKey, value: CGFloat(1.0), range: NSRange(location: 0, length: attributedString.length))
label.attributedText = attributedString
return label
}
soundPoolLabel.translatesAutoresizingMaskIntoConstraints = false
let topConstraint = soundPoolLabel.topAnchor.constraint(equalTo: view.topAnchor, constant: 90)
NSLayoutConstraint.activate([topConstraint])
Run Code Online (Sandbox Code Playgroud) 我有一个没有公共初始化程序或实例的类,它将自身的实例传递给另一个类中的闭包。它通过其他类的镜像来做到这一点。当我从闭包内访问该实例时,出现错误EXC_BAD_ACCESS,但传递给闭包的其他参数显然可以访问,并且不会导致错误的访问错误。我不知道为什么。请参阅下面的代码以在新项目或游乐场中进行复制。
我一直在试图找出一种方法来实现特定于类的访问控制,其中多个特定类可以单独访问另一个包含要在它们之间共享的变量和函数的类。所有其他类都没有这样的访问权限。有点像静态类或单例模式,但具有特定的、以类命名的访问控制。
我以为我有一些东西可以在纯 swift 中实际工作(这对我来说很好,因为我不了解 Objective-C,并且大约 16 个月前才开始使用 swift。)它是以一种几乎反 swift 的方式完成的,所以请耐心听我说——我的目标是从功能性的东西开始,然后将其推向优雅和美丽。
尽管我相当有信心它应该一切正常,但我EXC_BAD_ACCESS在一个非常意想不到的地方遇到了错误。
除非您在其“可以”列表中,否则不允许您访问“特定于类的私有”类的实例,我们可以将其称为“受限制”类。
允许访问 Restricted 类的类我们可以称为访问器类。
程序员必须告诉 Restricted 类从访问器调用函数,并通过将 Restricted 类的实例作为参数传递给该函数来“放入”该实例。您可以通过传入要调用的函数的名称、要调用该函数的 Accessor 类的实例以及该函数除了 Restricted 类实例之外还需要的任何参数来完成此操作。
我可以在 Restricted 类中进行巨大的切换,每种情况都正确调用每个 Accessor 类上指示的每个函数...但是为了避免过多的开销/设置,我有要调用的函数的名称Accessor 类作为字符串传入,并通过镜像进行访问。由于镜像只反映属性而不反映函数,因此函数必须是带有指定闭包的属性,而不是传统的函数。
我们可以将这些闭包称为 DropClosures,因为它们的目的是将共享的 Restricted 类放入其中。事实上,我们可以将整个模式称为“DropClosure 模式”。(或者也许是反模式,我知道这有点可怕。)
Restricted 类的“共享”实例的属性在内部存储为私有静态字典(基本上为 json)。为了生成自身的实际实例,Restricted 类使用接受该字典作为参数的私有初始值设定项。在 DropClosure 使用所述初始化实例运行后,Restricted 类使用该实例的 Mirror 将任何更改存储回“共享”字典中,并且该实例将超出范围,除非对其进行引用。因此,在每个 DropClosure 完成其运行之后,传递给它的实例作为类的“共享”方面的表示或多或少是无用的,这是故意的。
我这样做只是因为没有办法要求所有对某个弱引用的引用也都是弱的。我不希望有权访问弱引用的类为同一实例分配强引用并将其保留在内存中,这会允许实例在其访问范围之外共享,从而破坏访问控制目标。由于我无法在闭包完成后强制实例过期,因此下一个最好的办法是通过在闭包完成后使对象不再连接到共享源来消除这样做的动机。
这一切理论上都是有效的,并且会编译,并且在运行时不会抛出任何快速异常。
Accessor(或任何具有 Accessor 实例的类)调用 RestrictedClass.run(),运行代码验证 Accessor 实例,在该实例中查找 DropClosure,并将 Restricted 类的实例传递给该闭包。
然而,每当我尝试从 DropClosure 中访问该实例时,它都会给我带来前面提到的错误访问错误,似乎是在 C 或 Objective-C 级别上。
据我所知,此时该实例应该是可以访问的,并且正在使用的任何变量都不应该超出范围。
此时我完全在吐痰 - 是否有可能后台有某些东西阻止没有公共初始化器的类通过镜像传递?这是否与将其传递到从该镜像调用的闭包中有关?是否存在某种隐藏的弱引用使实例获得 ARC?
请注意,我尝试丢弃“弱”包装器对象,只将 Restricted …