滚动时应用程序(tableview)崩溃

时间:2012-09-22 10:02:18

标签: iphone xcode tableview

我正在创建一个试图从 .plist 文件中读取信息的应用程序(放在那里解析 JSON )。

从文件流中读取很好:得到了字典数组,但在尝试在tableview上显示时,问题就开始了。初始视图已正确加载,但是当我开始滚动时,应用程序崩溃了。

#define DOCUMENTS [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]

- (void)viewDidLoad
{
    [super viewDidLoad];    
    NSString *filePathDocArray = [DOCUMENTS stringByAppendingPathComponent:@"filters.plist"];
    NSString *filePathBundleArray = [[NSBundle mainBundle] pathForResource:@"filters" ofType:@"plist"];

    if (![[NSFileManager defaultManager] fileExistsAtPath:filePathDocArray]) {
        [[NSFileManager defaultManager] copyItemAtPath:filePathBundleArray toPath:filePathDocArray error:nil];
        NSLog(@"File saved");
    } else {
        NSLog(@"File already exists");
        filters = [NSArray arrayWithContentsOfFile:filePathDocArray];
    }

}

在这里,我将所需的所有信息都提供给过滤器数组(通过循环检查)。然后

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [filters count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *myIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:myIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:myIdentifier];                              
    }

    NSInteger crow = indexPath.row;
    NSDictionary *story = [filters objectAtIndex: crow];
    cell.textLabel.text = [story objectForKey:@"Name"];
    cell.detailTextLabel.text = [story objectForKey:@"Description"];
    return cell;
}
@end

当应用程序启动时,everething正常:我看到了normel表视图,但是当我开始滚动时崩溃

在我评估的一系列断点调试之后,在模拟器上启动应用程序后,数组上的链接过滤器螺丝,所以当我尝试填充下一个单元格时,故事字典无法正确创建。

它可能是什么问题?

控制台报告:

  

2012-09-22 13:37:43.545 JSONExample[4559:207] -[__NSCFString objectAtIndex:]: unrecognized selector sent to instance 0x6a083c0

     

2012-09-22 13:37:43.547 JSONExample[4559:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString objectAtIndex:]: unrecognized selector sent to instance 0x6a083c0'

3 个答案:

答案 0 :(得分:0)

-[NSCFString objectAtIndex:]: unrecognized selector似乎也是同样的问题。

您调用objectAtIndex:时,'filters'变量是一个NSString / CFString - 而不是数组,正如您所假设的那样。链接到的问题中给出的解决方案是设置过滤器数组retain

答案 1 :(得分:0)

你正在使用ARC? 如果没有,那么首先自动释放细胞! 并且如果过滤器不是保留属性..请将其合并为一次并且如果未使用ARC则再次合成它然后在dealloc块中释放它...我应该这样做...

答案 2 :(得分:0)

如果您为filters @property (nonatomic, retain) NSArray *filters;投放属性,则需要撰写self.filters = [NSArray arrayWithContentsOfFile:filePathDocArray];

否则你需要像filters = [[NSArray arrayWithContentsOfFile:filePathDocArray] retain];

那样写