我正在开发一个类似于Apple提供的PageControl
示例的应用。
我的应用程序从服务器获取数据并将其存储在本地NSMutableArray
。
然后通过加载单元格 nib 来以网格格式显示该数组。
我的应用程序在模拟器上运行,在擦除期间有一些延迟,但当我尝试在设备上运行时,我的应用程序崩溃。
当我使用Instruments
在设备上运行它时,它执行正常。
已启用僵尸并获得以下错误。
*** -[__NSArrayM release]: message sent to deallocated instance 0x18aef0
这就是我在做的事情:
didFinishLaunchingWithOptions
我调用两个网络服务,获取数据
并将其存储在本地数组尝试解决此问题。
这是我的代码。
//**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
答案 0 :(得分:-5)
可能是您的数据阵列可能会在发送消息之前通过任何逻辑错误解除分配
使用断点检查取消分配的位置