-1

アプリWEPopoverControllerにポップオーバーを表示します。

ユーザーがボタンをタップすると表示され、消えます。

正常に動作する場合もありますが、クラッシュする場合もあります。たとえば、iを開いて何度も閉じるとクラッシュするため、このオブジェクトのメモリ管理に何が欠けているのかわかりません。

- (void)showPopOver 
{

    if(!self.navPopover) {
          CGRect frame ;
        frame = CGRectMake(0, 0, 270, 132);

        UIViewController *viewCon = [[UIViewController alloc] init];

         viewCon.contentSizeForViewInPopover = frame.size;

        self.navPopover = [[WEPopoverController alloc] initWithContentViewController: viewCon];

        [self.navPopover setDelegate:self];

    } 

    if([self.navPopover isPopoverVisible]) {
        [self.navPopover dismissPopoverAnimated:YES];
        [self.navPopover setDelegate:nil];
        //[self.navPopover autorelease];
        self.navPopover = nil;

        [self.navPopover release];

        //[_navPopover release];
         NSLog(@"sconda");
    } else if (![self.navPopover isPopoverVisible]){



        [self.navPopover presentPopoverFromRect:CGRectMake(134,440, 50, 96)


                                         inView:self.view
                       permittedArrowDirections: UIPopoverArrowDirectionDown

        animated:YES];

        NSLog(@"tanga");
    }


}

どうもありがとう、

4

2 に答える 2

2

re:メモリ管理、これは確かに間違っています:

self.navPopover = nil; 
[self.navPopover release]; 

ポインタをnileすることで、オブジェクトを解放することはありません。これらのコード行の順序を逆にします

[self.navPopover release]; 
self.navPopover = nil; 
于 2012-09-10T12:40:33.860 に答える
1

DidDismissPopoverはありますか?

 - (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
self.navPopover = nil;
} 

showPopoverで却下する代わりに、この方法で却下する必要があります

ああ、ここでリリースしないでください

 [self.navPopover release];
 NSLog(@"sconda");
于 2012-09-10T10:17:12.230 に答える