【问题标题】:Table View Scrolling cause problems when I use dynamic data当我使用动态数据时,表格视图滚动会导致问题
【发布时间】:2011-07-03 10:30:24
【问题描述】:

当我使用静态数据时没有问题,但我使用 Web 服务的动态数据时出现问题(表格视图滚动导致程序崩溃)为什么?如果我评论这些行添加静态数据它可以工作;

//tempCs is NSDictionary
tempDc = [arrHaberler objectAtIndex:indexPath.row];
cell.textLabel.text = [tempDc valueForKey:@"short_header"];

NSData *imgData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:[tempDc valueForKey:@"iphone_src"]]];
UIImage *myImage = [[[UIImage alloc] initWithData:imgData] autorelease];
cell.imageView.image = myImage;

【问题讨论】:

    标签: iphone objective-c memory-management uitableview


    【解决方案1】:

    没有空值检查(设置NSData *imgData 和设置UIImage *myImage)并且在同步调用服务器。 fmpov,问题就在那里。

    【讨论】:

    • 我尝试在另一行发表评论,问题出在这一行: tempDc = [arrHaberler objectAtIndex:indexPath.row];我将“indexPath.row”更改为“0”仍然会导致崩溃...关于何时将数据分配给 NSDictionary 的问题...
    • Null 检查很少是 ObjectiveC 的答案,在 null 上调用方法是有效的。这是尝试在容器(NSArray、NSDictionary 等)中存储 null 时的答案。
    • 这正是我的意思
    【解决方案2】:

    @VNevzatR 我只是在问你,你是否从某个地方调用了大量的图像......因为这不是你 UITableView 的问题,正如你所说的在静态数据中工作正常,问题出在其他地方,因此,如果您一次调用大量图像....尝试这样做...释放该池。

    -(void) parseImages
    {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    
        //Fetch your images here
    
        [self performSelectorOnMainThread:@selector(Done) withObject:nil waitUntilDone:YES];
        [pool release];
    }
    
    -(void) Done {
        [self.tableView reloadData];
    }
    

    希望它能解决您的问题...祝您好运

    【讨论】:

    • 感谢约翰的回答,但正如我在下面所说,将数据分配给 NSDictioanry 导致问题......这与图像无关,我从某些服务器获取图像,这些图像确实存在。谢谢你的帮助..
    • 请尝试通过调试器在多个位置应用断点进行检查...
    • 我听你的帮助,我使用了断点,我发现滚动数组后错误会变空......但我还没有解决......
    【解决方案3】:

    我尝试在另一行发表评论,但问题出在这一行:

    tempDc = [arrHaberler objectAtIndex:indexPath.row];

    我将“indexPath.row”更改为“0”仍然会导致崩溃...关于何时将数据分配给 NSDictionary 的问题

    【讨论】:

      【解决方案4】:

      您不释放 imgData。你会想在创建 UIImage 之后这样做。

      除此之外,从您的描述来看,numbersOfRowsInSection 方法可能有错误?


      编辑(讨论后):

      (由于无法识别的选择器(即来自 NSArray 的方法)发送到 NSString 实例而导致崩溃)

      有很多方法可以达到这种状态,包括访问一些已释放和重用的内存(即缺少保留),或者由于某些解析产生错误结果而用字符串覆盖数组。

      【讨论】:

      • 它有 7 行 bur 我不认为这是相关的,因为当我使用静态数据时没有问题...我评论除了 tempDc = [arrHaberler objectAtIndex:indexPath.row] 之外的所有行;它仍然崩溃......所以这与图像或动态数据无关......它只是将数据分配给 NSDictionary......
      • 你遇到了什么样的崩溃? EXC_BAD_ACCESS?未捕获的异常?
      • Crash Error: [NSCFString objectAtIndex:]: unrecognized selector sent to instance 0x4d4d3d0 我认为滚动 arrHaberler (NSArray) 后不再包含数据...滚动后它是空的,但我不知道为什么,因为我在 viewDidLoad() 方法中将数据加载到 NSArray...
      • 好吧,这是你的错误。你认为你有一个数组,当你的 var (arrHaberler) 指向的数据实际上是一个 NSString。
      • hımm 亲爱的 jv42,如果它不在数组中,它如何在 viewDidLoad() 上加载数据?因为它是相同的代码...在 viewDidLoad 中它可以工作,因为我在控制台上使用 NSLog() 观看它我看到了数据,它也来到了 tablecell.. 滚动后它崩溃了.. 滚动后它转换为 NSString?跨度>
      猜你喜欢
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多