我正在开发类似于Apple提供的PageControl示例的应用程序。 我的应用程序从服务器获取数据,并将其存储在本地的NSMutableArray 然后通过加载单元格nib以网格格式显示该数组。

我的应用程序在模拟器上运行时在擦除过程中会有一些滞后,但是当我尝试在设备上运行它时,我的应用程序崩溃了。

另外,当我使用Instruments在设备上运行它时,它执行得很好。

已启用僵尸并获得以下错误。

*** -[__NSArrayM release]: message sent to deallocated instance 0x18aef0

这就是我在做什么:

  1. didFinishLaunchingWithOptions我调用了两个Web服务,获取数据并将其存储在本地数组中
  2. 将视图控制器推入生成页面的位置

试图解决同样的问题。


这是我的代码。



    //**AppDelegate.h**
    @interface TumBhiAppDelegate : UIResponder  {
    NSMutableArray *arrDetailsByCategory;
    }
    @property (nonatomic, retain) IBOutlet NSMutableArray *arrDetailsByCategory;    
    -(IBAction)doneProcessing:(id)sender;
    @end

    //**AppDelegate.m**
    #import "AppDelegate.h"
    #import "Server.h"

    @implementation AppDelegate
    @synthesize arrDetailsByCategory;
    //Once processing is done push the view
    -(IBAction)doneProcessing:(id)sender
    {    
    BaseContentViewController *baseController = [[BaseContentViewController alloc] initWithNibName:@"BaseContentViewController" bundle:nil];    
    [self.navigationController pushViewController:baseController animated:YES];    
    [baseController release];
    }

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
    arrDetailsByCategory  = [[NSMutableArray alloc] init];
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.viewController = [[TumBhiViewController alloc] initWithNibName:@"TumBhiViewController" bundle:nil];

    self.navigationController = [[UINavigationController alloc]initWithRootViewController:self.viewController];
    [self.navigationController setNavigationBarHidden:YES];

    self.window.rootViewController = self.navigationController;
    [self.window makeKeyAndVisible];
    //getDetails is called 5-6 time
    //arrDetailsByCategory is populated accordingly 
    [Server getDetails:@"ABC"];
    [self doneProcessing:nil];
    return YES;
    }
    @end

    //**Server.h**
    @interface ServerCommunication : NSObject{
    }
    -(BOOL)getDetails:(NSString *)str
    @end

    //**Server.m**
    #import "Server.h"
    #import "AppDelegate.h"
    @implementation ServerCommunication

    -(BOOL)getDetails:(NSString *)str
    {
    NSMutableArray *arrFinal = [NSMutableArray array];
    //call web-service populate arrFinal
    [[[AppDelegate GetAppDelegate] arrDetailsByCategory] addObjectsFromArray:arrFinal];
    }
   @end

调试器消息

*** -[__NSArrayM release]: message sent to deallocated instance 0x7aa0870
[Switching to process 636 thread 0x15903]
[Switching to process 636 thread 0x15903]
sharedlibrary apply-load-rules all
(gdb) 

堆栈信息:

0x01920db0  <+0096>  testb  $0x1,(%eax)
0x01920db3  <+0099>  je     0x1920ded <___forwarding___+157>
0x01920db5  <+0101>  mov    %edi,0x4(%esp)
0x01920db9  <+0105>  movl   $0x0,0x18(%esp)
0x01920dc1  <+0113>  movl   $0x0,0x14(%esp)
0x01920dc9  <+0121>  movl   $0x0,0x10(%esp)
0x01920dd1  <+0129>  movl   $0x0,0xc(%esp)
0x01920dd9  <+0137>  movl   $0x0,0x8(%esp)
0x01920de1  <+0145>  movl   $0x15,(%esp)
0x01920de8  <+0152>  call   0x198ec10 <__CFRecordAllocationEvent>
0x01920ded  <+0157>  mov    -0x10(%ebp),%eax
0x01920df0  <+0160>  mov    %eax,(%esp)
0x01920df3  <+0163>  call   0x19fcbf6 <dyld_stub_sel_getName>
0x01920df8  <+0168>  mov    %edi,0x10(%esp)
0x01920dfc  <+0172>  mov    %eax,0xc(%esp)
0x01920e00  <+0176>  add    $0xa,%esi
0x01920e03  <+0179>  mov    %esi,0x8(%esp)
0x01920e07  <+0183>  lea    0x12e6aa(%ebx),%eax
0x01920e0d  <+0189>  mov    %eax,0x4(%esp)
0x01920e11  <+0193>  movl   $0x3,(%esp)
0x01920e18  <+0200>  call   0x196bad0 <CFLog>
0x01920e1d  <+0205>  int3   
0x01920e1e  <+0206>  call   0x19fc8b4 <dyld_stub_getpid> //**Dies here with Thread 5**
0x01920e23  <+0211>  mov    %eax,(%esp)
0x01920e26  <+0214>  movl   $0x9,0x4(%esp)
0x01920e2e  <+0222>  call   0x19fc908 <dyld_stub_kill>
0x01920e33  <+0227>  xor    %edi,%edi
0x01920e35  <+0229>  jmp    0x192112e <___forwarding___+990>
0x01920e3a  <+0234>  lea    0xed29f(%ebx),%eax
0x01920e40  <+0240>  mov    %eax,0x4(%esp)
0x01920e44  <+0244>  mov    %esi,(%esp)
0x01920e47  <+0247>  call   0x19fcc56 <dyld_stub_strcmp>
0x01920e4c  <+0252>  test   %eax,%eax
0x01920e4e  <+0254>  mov    %edi,%eax
0x01920e50  <+0256>  mov    %eax,%edi
0x01920e52  <+0258>  mov    %eax,-0x14(%ebp)
0x01920e55  <+0261>  jne    0x1920e63 <___forwarding___+275>
0x01920e57  <+0263>  mov    0x130e5a(%ebx),%eax
0x01920e5d  <+0269>  mov    -0x14(%ebp),%ecx
0x01920e60  <+0272>  mov    (%ecx,%eax,1),%edi
0x01920e63  <+0275>  mov    %edi,(%esp)
0x01920e66  <+0278>  call   0x19fcad6 <dyld_stub_object_getClass>
0x01920e6b  <+0283>  mov    0x1255ee(%ebx),%ecx

#1楼 票数:-5

可能是您的数据数组可能在发送释放消息之前通过任何逻辑错误而被释放了

使用断点检查它在哪里被释放

  ask by Sumit translate from so

未解决问题?本站智能推荐:

3回复

[CFArray版本]:消息发送到已释放实例

我在代码中使用以下方法: 这是一种编码良好的便捷方法吗? 我认为,它返回一个自动释放的NSMutableArray。 此方法被另一个调用: 在某些视图控制器中调用了此方法(otherMethod),我想在其中存储返回的数组并在取消分配视图控制器时释放它。 但是,当在此视
1回复

-[CFRunLoopTimer版本]:消息发送到已释放实例0x4e281f0

我已经在xcode 4上完成了聊天应用程序,没有错误,但是当我午餐该应用程序需要4秒钟时,它在main.m文件中向我显示线程错误(SIGKILL&EXE_BAD_ACCESS) } 然后我尝试了NSZombieEnabled,并得到了这个<-[CFRunLoopTimer版本
1回复

消息发送到已释放实例

我有一个数据表视图。 在快速滚动表2到3次时,它崩溃了。 我的gdb告诉我的信息是"message sent to deallocated instance...." 有人知道如何解决吗?
5回复

-[__ NSArrayM objectForKey:]:无法识别的选择器已发送到实例0x9d0d720

大家好,我有一个关于-[__NSArrayM objectForKey:]: 。 试图解决,但没有得到更好的解决方案。 请帮助我找到解决方案。 提前致谢 以下是问题 由于未捕获的异常“ NSInvalidArgumentException”而终止应用程序,原因:“-[__
3回复

-[__ NSArrayM length]:无法识别的选择器已发送到实例0x145ecca0

出现以下错误,无法弄清它在哪里。 请帮助我找出问题所在。 TIA 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[__ NSArrayM长度]:无法识别的选择器已发送到实例0x145ecca0'***首先抛出调用堆栈:
5回复

如何检测使用Xcode双重释放的对象-消息发送到已释放实例?

我是Xcode4的新手,我想知道如何识别它的双重发行版。 在调试器中,我看到类似*** -[NSConcreteMutableData release]: message sent to deallocated instance 0x60b63fe0 。 问题在于,知道地址对识别对象
3回复

[NSMutableURLRequest已发布]:消息发送到已释放实例

我的应用程序在didViewLoad方法中调用了下面的rqst_run方法,但是出现错误。 调试器报告以下错误: 我不知道该变量在哪里发布 在头文件(接口部分)中声明: 我在实现中定义了此方法:
3回复

iPhone崩溃-消息已发送到已释放实例

好的,这是我得到的错误: 这是导致崩溃的代码: 其他地方: 并且: 在任何地方都没有其他的waitingOpponentTimer发生,只有我上面显示的那些。 WaitingOpponentTimeOut操作仅设置了一些变量,对计时器或waitingOppone