iOS 5中的TableView在启用ARC时崩溃

时间:2011-11-06 04:52:22

标签: objective-c uitableview ios5 automatic-ref-counting

我在iOS5中遇到了这个问题,这给我带来了错误,请注意它适用于较旧的sdk。 这是相关代码: h文件     #import

@interface WordListTableViewController : UITableViewController {
  //NSMutableDictionary *words;
  //NSArray *sections;
}
@end

m文件      #import“WordListTableViewController.h”      #import“DefinitionViewController.h”

@interface WordListTableViewController()
  @property (nonatomic, strong) NSMutableDictionary *words;
  @property (nonatomic, strong) NSArray *sections;
@end


@implementation WordListTableViewController

@synthesize  words, sections;
- (NSMutableDictionary *) words
{
   if(!words){
          NSURL *wordsURL = [NSURL URLWithString:@"http://localhost/Vocabulous.txt"];
          words = [NSMutableDictionary dictionaryWithContentsOfURL:wordsURL] ;
   }
   return words;
}

- (NSArray *) sections
{
    if(!sections)
    {
       sections = [[self.words allKeys] sortedArrayUsingSelector:@selector(compare:)] ;
    }
    return sections;
}

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

static NSString *CellIdentifier = @"WordListTableViewCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
//cell.textLabel.text = cell.textLabel.text = [self wordAtIndexPath:indexPath];
cell.textLabel.text = @"Test";


    return cell;
}

h App代表文件     #import

@interface VocabAppDelegate : UIResponder <UIApplicationDelegate>
{

}

@property (strong, nonatomic)  UIWindow *window;
@property (strong, nonatomic) UINavigationController *nav;
@end

m App代理文件及相关代码:     #import“VocabAppDelegate.h”     #import“WordListTableViewController.h”

@implementation VocabAppDelegate
@synthesize window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:     (NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    WordListTableViewController *wltvc = [[WordListTableViewController alloc] init];
    self.nav = [[UINavigationController alloc] initWithRootViewController: wltvc ];

    self.window.rootViewController = self.nav;
    [self.window makeKeyAndVisible];
    return YES;

}

错误如下:EXEC_BAD_ACCESS 它就像只设置可见单元格,当我开始向下滚动查找不可见的单元格时,就像它们无法显示一样。

Fina UPDATE: 根据mattyhoe的建议,我已经用静态文本替换了方法wordAtIndexPath,并按照其他两个侧面注释加上我使用委托的方式,它可以工作!!!

由于

1 个答案:

答案 0 :(得分:0)

没有什么看起来不合适,所以很可能是你在wordAtIndexPath中做的工作。要测试这个理论,只需用以下内容替换该行:

cell.textLabel.text = @"Hello";

作为附注,您不需要声明ivars。只需使用@property s。 此外,您可能希望在分配新单元格时设置附件类型,而不是每次调用此方法时都是如此,因此在条件内部移动它是有意义的。