2012-09-17 108 views
2

我正在开发类似于Apple提供的样本PageControl的应用程序。 我的应用程序从服务器获取数据并将其存储在本地的NSMutableArray中。 然后通过加载单元格笔尖以网格格式显示该数组。*** - [__ NSArrayM发布]:发送到已释放实例的消息

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

另外,当我在设备上使用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 
+4

显示你的代码,没有它我们不能帮你 –

+0

请给我们一个堆栈跟踪。 – jrtc27

+0

提供堆栈跟踪和调试器消息。谢谢。 – Sumit

回答

-5

可能是你的数据阵列可以由任何逻辑错误的手段得到解除分配之前被发送到释放消息它

使用断点检查它被拿回去的地方

+2

从不发送“超级” –

相关问题