2013-04-25 59 views
1

首先,我剛開始進行iPhone開發。我試圖讓SBTableAlert工作(請參閱https://github.com/blommegard/SBTableAlertSBTableAlert無法正常工作

我的初始設置很簡單:我有一個帶有按鈕的UIViewController。在按鈕按下,我這樣做時(按照SBTableAlert示例):

- (IBAction)myBtn_Press 
{ 
    SBTableAlert *alert; 
    alert = [[SBTableAlert alloc] initWithTitle:@"Apple Style" cancelButtonTitle:@"Cancel" messageFormat:nil]; 
    [alert.view setTag:2]; 
    [alert setStyle:SBTableAlertStyleApple]; 

    MySecondViewController *myWGVC = [[MySecondViewController alloc] init]; 

    [alert setDelegate:myWGVC]; 
    [alert setDataSource:myWGVC]; 

    [alert show]; 
} 

MySecondViewController被聲明爲:

@interface MySecondViewController : NSObject <SBTableAlertDelegate, SBTableAlertDataSource> 

這意味着它將爲表視圖委託起作用。我還包括以下(從例如粘貼):

@implementation MySecondViewController 

#pragma mark - SBTableAlertDataSource 

- (UITableViewCell *)tableAlert:(SBTableAlert *)tableAlert cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell; 

    if (tableAlert.view.tag == 0 || tableAlert.view.tag == 1) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]; 
    } else { 
     // Note: SBTableAlertCell 
     cell = [[SBTableAlertCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]; 
    } 

    [cell.textLabel setText:[NSString stringWithFormat:@"Cell %d", indexPath.row]]; 

    return cell; 
} 

- (NSInteger)tableAlert:(SBTableAlert *)tableAlert numberOfRowsInSection:(NSInteger)section { 
    if (tableAlert.type == SBTableAlertTypeSingleSelect) 
     return 3; 
    else 
     return 10; 
} 

- (NSInteger)numberOfSectionsInTableAlert:(SBTableAlert *)tableAlert { 
    if (tableAlert.view.tag == 3) 
     return 2; 
    else 
     return 1; 
} 

- (NSString *)tableAlert:(SBTableAlert *)tableAlert titleForHeaderInSection:(NSInteger)section { 
    if (tableAlert.view.tag == 3) 
     return [NSString stringWithFormat:@"Section Header %d", section]; 
    else 
     return nil; 
} 

#pragma mark - SBTableAlertDelegate 

- (void)tableAlert:(SBTableAlert *)tableAlert didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (tableAlert.type == SBTableAlertTypeMultipleSelct) { 
    UITableViewCell *cell = [tableAlert.tableView cellForRowAtIndexPath:indexPath]; 
     if (cell.accessoryType == UITableViewCellAccessoryNone) 
      [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 
     else 
      [cell setAccessoryType:UITableViewCellAccessoryNone]; 

      [tableAlert.tableView deselectRowAtIndexPath:indexPath animated:NO]; 
    } 
} 

- (void)tableAlert:(SBTableAlert *)tableAlert didDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 
    NSLog(@"Dismissed: %i", buttonIndex); 
} 

我得到的錯誤信息是:

2013-04-25 00:13:35.389 MyTestProject[3386:c07] *** -[SBTableAlert tableView:cellForRowAtIndexPath:]: message sent to deallocated instance 0x682ed80 

,但是我不知道如何來跟蹤這個或調試。看起來它可能與ARC有關,因爲演示項目沒有使用它,但我無法確定如何解決這個問題。

任何幫助表示讚賞!

+0

如果你不使用ARC,那麼你需要'[alert autorelease];' – 2013-04-25 06:56:37

+0

我正在使用ARC。 – Sandy 2013-04-25 14:07:53

回答

3

嘗試在alertmyWGVC對象的主UIViewController子類中使用strong屬性創建屬性。因爲沒有強烈的引用警報的委託/數據源和警報本身,因此在警報顯示在屏幕上之前,它們似乎被ARC解除分配。

+0

這是做的伎倆,謝謝! – Sandy 2013-04-25 14:55:36