2

PageControlAppleが提供するサンプルに似たアプリを開発しています。私のアプリはサーバーからデータを取得し、NSMutableArrayローカルに保存します。次に、セルnibをロードして、その配列をグリッド形式で表示します。

私のアプリはシミュレーターで実行され、ワイプ中に遅延が発生しますが、デバイスで実行しようとするとアプリがクラッシュします。

また、それを使用してデバイスInstrumentsで実行すると、正常に実行されます。

ゾンビを有効にすると、次のエラーが発生します。

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

これは私がやっていることです:

  1. 2didFinishLaunchingWithOptionsつの Web サービスを呼び出し、データを取得してローカル配列に保存します。
  2. ページが生成される場所にView Controllerをプッシュします

同じことを解決しようとしています。


これが私のコードです。



    //**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

1 に答える 1

-5

解放メッセージが送信される前に、論理エラーによってデータ配列の割り当てが解除される可能性があります

ブレークポイントを使用して、割り当てが解除された場所を確認します

于 2012-09-17T13:00:16.407 に答える