相关疑难解决方法(0)

iOS 4应用程序在iOS 3.1.3启动时崩溃:未找到符号:__ NSConcreteStackBlock

我正在使用iOS 4.0 SDK运行Xcode 3.2.3.我使用Base SDK = iphoneos4.0,Active SDK = iphoneos4.0,Deployment Target = 3.1.3和Architecture = standard(arm6 arm7)构建了我的应用程序.编译器= GCC 4.2.据我了解,这是为iOS 4和3 构建应用程序的正确方法.

该应用程序在运行iOS 4的设备上运行良好.但是当您尝试在具有iOS 3.1.3(iPod Touch 1G)的设备上运行它时,它会在启动时崩溃:

dyld: Symbol not found: __NSConcreteStackBlock
  Referenced from: /var/mobile/Applications/192B30ED-16AC-431E-B0E9-67C1F41FD5DA/MyApp.app/MyApp
  Expected in: /usr/lib/libSystem.B.dylib
Run Code Online (Sandbox Code Playgroud)

在我的main()函数被调用之前,它似乎是一个相当"低级"动态链接库的问题.我甚至尝试重新启动设备等,没有运气.这是崩溃日志的一部分:

Process:         MyApp [60]
Path:            /var/mobile/Applications/192B30ED-16AC-431E-B0E9-67C1F41FD5DA/MyApp.app/MyApp
Identifier:      MyApp
Version:         ??? (???)
Code Type:       ARM (Native)
Parent Process:  launchd [1]

Date/Time:       2010-07-22 17:16:17.942 -0400
OS Version:      iPhone OS 3.1.3 (7E18)
Report Version:  104

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x00000001, 0xe7ffdefe
Crashed Thread:  0 …
Run Code Online (Sandbox Code Playgroud)

iphone ios4 ios

46
推荐指数
2
解决办法
2万
查看次数

使用animateWithDuration完成导致exc_bad_access

我试图在一个名为addToPlaylist和removeFromPlayList的UITableViewCell中为2个UIButton设置动画(刷过后它们会向右移动)并使用如下块

[UIView animateWithDuration:0.25 animations:^{

    self.addToPlaylist.center      = CGPointMake(contentsSize.width + (buttonSize.width / 2), (buttonSize.height / 2));
    self.removeFromPlaylist.center = CGPointMake(contentsSize.width + (buttonSize.width / 2), (buttonSize.height / 2));
    myImage.alpha = 1.0;

}
 completion:^ (BOOL finished) 
 {
     if (finished) {
         // Revert image view to original.
         NSLog(@"Is completed");
         self.addToPlaylist.hidden       = YES;
         self.removeFromPlaylist.hidden  = YES;
         self.hasSwipeOpen               = NO;
     }
 }];
Run Code Online (Sandbox Code Playgroud)

完成后我想隐藏按钮以尝试减少重绘滚动等.

这段代码位于' - (void)swipeOff'中,在UITableViewControllers方法中调用scrollViewWillBeginDragging,如下所示:

- (void)scrollViewWillBeginDragging:(UIScrollView *) scrollView
{
   for (MediaCellView* cell in [self.tableView visibleCells]) {
        if (cell.hasSwipeOpen) {
           [cell swipeOff];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是完成代码,如果我删除它或将其设置为nil一切都很好,如果我包含它我得到一个EXC_BAD_ACCESS.即使我将其包含在if(已完成)注释掉的任何或所有行中

我是以错误的方式使用它,任何帮助都非常感激. …

iphone objective-c-blocks

21
推荐指数
1
解决办法
1万
查看次数

复制或保留Block时EXC_BAD_ACCESS

据我所知,Block就像一个对象,因为你可以向它发送复制或释放消息,例如:

[myBlock copy];
Run Code Online (Sandbox Code Playgroud)

但是每当我这样做或释放一个块时,我都会得到EXC_BAD_ACCESS.

如果我使用块函数,一切都按预期工作,例如:

Block_copy(myBlock);
Run Code Online (Sandbox Code Playgroud)

我认为释放和复制块的两种方式都是相同的?

这不是一个问题,但如果我有一个Block的属性(副本)有点烦人,我必须自己编写setter方法.

例如:使用属性:

//Header
@property (nonatomic, copy) void (^cancelledBlock)(void);

//Implementation
@sythesize cancelledBlock;
Run Code Online (Sandbox Code Playgroud)

设置时会导致EXC_BAD_ACCESS cancelledBlock

但如果我这样做:

//Header
@property (nonatomic, copy) void (^cancelledBlock)(void);

//Implementation
@sythesize cancelledBlock; //saves me doing the getter as well

- (void)setCancelledBlock:(void (^)(void))aCancelledBlock {
    if (cancelledBlock == aCancelledBlock) {
        return;
    }
    void (^oldValue)(void) = cancelledBlock;
    cancelledBlock = Block_copy(aCancelledBlock);
    Block_release(oldValue);

}
Run Code Online (Sandbox Code Playgroud)

没有EXC_BAD_ACCESS,一切都按预期运行.

iphone exc-bad-access objective-c objective-c-blocks

16
推荐指数
1
解决办法
3513
查看次数

由于iOS 3.1.3的块支持导致的奇怪问题

因为我经常在3.1.3设备上测试我的应用程序,所以我必须添加一个链接标志"-weak_library /usr/lib/libSystem.B.dylib"来支持那里的块.直到我开始从Apple样本中添加一些游戏中心编码之后,这才成问题.只有在模拟器中,当一个块(甚至是一个空块)作为GC编码中的认证回调被移交时,我才会在Apple的libs深处遇到一个瞬间崩溃(EXC_BAD_ACCESS).当我提供nil作为回调时,GC登录工作正常,应用程序继续.虽然在所有真实设备上都可以正常工作(iPad,带有iOS 4.3的iPhone,带有iOS 3.1.3的iPod - 当然还有GC).当我删除链接器的弱链接标志时,它也将在模拟器中运行w/o问题.有没有人知道那里发生了什么?这不是一个令人满意的解决方案,只有在我想要部署到我的古老iPod时才添加链接器标志.

谢谢,habitoti

iphone sdk ios objective-c-blocks

3
推荐指数
1
解决办法
1165
查看次数