*** - [__ NSArrayM发布]:发送到解除分配实例的消息

时间:2012-09-17 12:49:10

标签: iphone xcode4 nsarray uipagecontrol

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

我的应用程序在模拟器上运行,在擦除期间有一些延迟,但当我尝试在设备上运行时,我的应用程序崩溃。

当我使用Instruments在设备上运行它时,它执行正常。

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

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

这就是我在做的事情:

  1. didFinishLaunchingWithOptions我调用两个网络服务,获取数据 并将其存储在本地数组
  2. 按视图控制器生成页面
  3. 尝试解决此问题。


    这是我的代码。

    
    
        //**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 个答案:

答案 0 :(得分:-5)

可能是您的数据阵列可能会在发送消息之前通过任何逻辑错误解除分配

使用断点检查取消分配的位置