2012-05-19 4 views
0

Сейчас я создаю приложение, которое использует UITableView, но я боюсь этой проблемы в течение 3 дней, и я не могу понять это.UITableView ARC issue

В файле .h я подписываюсь на оба метода tableview. Как это:

#import <UIKit/UIKit.h> 
#import <MapKit/MapKit.h> 
#import <QuartzCore/QuartzCore.h> 
#import <Twitter/Twitter.h> 
#import <Accounts/Accounts.h> 


@interface pagetwoViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> 
{ 

} 

@property (strong, nonatomic) IBOutlet MKMapView *mapView; 
@property (strong, nonatomic) IBOutlet UIImageView *twitterFrame; 
@property (strong, nonatomic) IBOutlet UITableView *twitterTableView; 
@property (strong, nonatomic) NSMutableArray *timeLineData; 

И моя реализация может быть найдена здесь:

.m file

Он всегда падает всякий раз, когда приложение нагрузки вверх. Поэтому я включил NSZombies, и я получил сообщение:

[pagetwoViewController numberOfSectionsInTableView:]: message sent to deallocated instance 0x27d960 

Так что я смотрел это вверх в Интернете, и я обнаружил, что почти во всех случаях это происходит, когда TableView получает выпущен до numberOfSectionsInTableView. Все веб-сайты говорят, что я должен сохранить табличное представление, но я использую ARC, и я не могу этого сделать. Иногда это происходит. И тогда, когда этого не произойдет, в тот момент, когда я попытаюсь коснуться табличного представления или попробую прокрутить его, он сработает. Я повсюду искал, и я просто ничего не могу найти по этому вопросу. И я, конечно, не могу понять, где выдается табличное представление. Любая помощь будет очень признательна.

+0

Я согласен с подозрениями @ RBI, что проблема лежит в pagetwoViewController, а не на представлении таблицы. Если мы сможем увидеть код, который создает этот контроллер и переходит к нему, мы можем диагностировать, что происходит. Но как академический вопрос (и совершенно не связанный с вашим вопросом), я вижу, что ваши IBOutlets сильны. Обычно они должны быть слабыми. См. [Управление временем жизни объектов из файлов Nib] (http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html#//apple_ref/doc/uid/ 10000051i-CH4-SW6) в Руководстве по программированию ресурсов. – Rob

+0

Пожалуйста, напишите код источника данных таблицы, который вы используете в файле реализации (.m). –

+0

. Я, у которого есть сообщение .m, имеет код источника данных. – user1320885

ответ

2

Вы уверены, что даже инициализировали табличное представление? У вашего .h нет выхода, описанного для таблицы, который предполагает, что он не подключен к чему-либо в раскадровке/xib, и ваш .m не инициализирует таблицу программно.

Edit: Ответ # 2 Попробуйте переместить декларацию pagetwoViewController в заголовок раскадровку ... Ваша проблема в том, что ваш единственный добавив вид pageTwoViewController поэтому ARC добавляет выпуск к ViewController в конце viewDidLoad, потому что он объявлен локально.

+0

У меня есть табличное представление, подключенное через IB, это не то же самое, что и инициализация, потому что я также могу получить информацию, чтобы отображать в нем несколько раз, когда он доносил крах. – user1320885

+0

О, я должен пропустить IBOutlet на первый взгляд. В этом случае подключение к IB осуществляется по инициализации. – RBI

+0

Теперь, когда я смотрю на него, сообщение об ошибке nszombie msg сообщает, что его выпущенный pageTwoViewController, а не tableview внутри. Возможно, вы захотите опубликовать код, представляющий этот диспетчер представлений, или объясните, как его отделяют, если используете раскадровку. – RBI

Смежные вопросы