EXC_BAD_ACCESS брошенный с двумя таблицами в одном представлении - PullRequest
0 голосов
/ 06 января 2012

У меня есть представление с двумя таблицами. Я обрабатываю каждую из этих таблиц двумя разными контроллерами вместо владельца файла. Приложение загружается правильно, но когда я прокручиваю таблицу «Under Featured» / Store, выдается EXC_BAD_ACCESS. Кажется, таблица не сохраняется. Я перебираю паутину, но не могу найти причину.

XIB: enter image description here

UnderFeaturedViewController.h:

#import <UIKit/UIKit.h>
#import "iMagsAppDelegate.h"

@interface UnderFeaturedViewController : UIViewController <UITabBarDelegate, UITableViewDelegate, UITableViewDataSource>
{
    IBOutlet UITableView *showTableView;
    IBOutlet UITabBarItem *hotButton;
    IBOutlet UITabBarItem *allButton;
    IBOutlet UITabBarItem *catButton;
    UIPopoverController *popoverController;
    NSMutableArray *showArray;
    iMagsAppDelegate *appDelegate;
    UIInterfaceOrientation orientation;
}

@property (nonatomic, retain) IBOutlet UITableView *showTableView;
@property (nonatomic, retain) IBOutlet UITabBarItem *hotButton;
@property (nonatomic, retain) IBOutlet UITabBarItem *allButton;
@property (nonatomic, retain) IBOutlet UITabBarItem *catButton;
@property (nonatomic, retain) UIPopoverController *popoverController;
@property (nonatomic, retain) NSMutableArray *showArray;
@property (nonatomic, retain) iMagsAppDelegate *appDelegate;

-(void) setTitle:(NSString *)title;
-(void) setGuest;
-(void) updateView:(NSNotification *)notification;
-(void) dismissModalView:(int) modalID;
-(Boolean) isGuest;

-(IBAction) showTag:(NSString*)tag;
-(IBAction) showName:(NSString *) name;
-(IBAction) showStore;
-(IBAction) showOwned;
-(IBAction) showCategories;
-(IBAction) showSearch;
-(IBAction) showMore;
-(IBAction) showFirstDialog;

@end

cellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{

    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    NSInteger section = [indexPath row];

    cell.textLabel.text = [NSString stringWithFormat:@"%d", section];

    return cell;
}

Zombies:

enter image description here

Backtrace:

#0  0x0182509b in objc_msgSend ()
#1  0x005afd18 in -[UIScrollView(UIScrollViewInternal) _scrollViewWillBeginDragging] ()
#2  0x005a31e9 in -[UIScrollView _updatePanGesture] ()
#3  0x005a74e6 in -[UIScrollView handlePan:] ()
#4  0x0081be39 in _UIGestureRecognizerSendActions ()
#5  0x0081b143 in -[UIGestureRecognizer _updateGestureWithEvent:] ()
#6  0x0081c3cf in -[UIGestureRecognizer _delayedUpdateGesture] ()
#7  0x0081ea31 in ___UIGestureRecognizerUpdate_block_invoke_0541 ()
#8  0x0081e98c in _UIGestureRecognizerApplyBlocksToArray ()
#9  0x008173e7 in _UIGestureRecognizerUpdate ()
#10 0x0057f812 in -[UIWindow _sendGesturesForEvent:] ()
#11 0x0057fba2 in -[UIWindow sendEvent:] ()
#12 0x00566384 in -[UIApplication sendEvent:] ()
#13 0x00559aa9 in _UIApplicationHandleEvent ()
#14 0x017f5fa9 in PurpleEventCallback ()
#15 0x016361c5 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#16 0x0159b022 in __CFRunLoopDoSource1 ()
#17 0x0159990a in __CFRunLoopRun ()
#18 0x01598db4 in CFRunLoopRunSpecific ()
#19 0x01598ccb in CFRunLoopRunInMode ()
#20 0x017f4879 in GSEventRunModal ()
#21 0x017f493e in GSEventRun ()
#22 0x00557a9b in UIApplicationMain ()
#23 0x00001e5d in main (argc=1, argv=0xbffff5f0) at ...

1 Ответ

0 голосов
/ 06 января 2012

Таким образом, SplitViewController является владельцем файла, который сохраняет представление, но не UnderFeaturedViewController

Создайте ссылочный IBOutlet с сильным сохранением для UnderFeaturedViewController, чтобы SplitViewController действительно его сохранил.UnderFeaturedViewController не был сохранен в любом месте, поэтому он освобождается при следующем цикле выполнения.

Вы также можете установить точку останова на dealloc, чтобы вы знали, когда он освобождается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...