Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 自定义UITableViewCell会产生问题_Ios_Objective C_Xcode_Uitableview - Fatal编程技术网

Ios 自定义UITableViewCell会产生问题

Ios 自定义UITableViewCell会产生问题,ios,objective-c,xcode,uitableview,Ios,Objective C,Xcode,Uitableview,概述 我正在使用自定义的UITableViewCell创建一个UITableView(在iOS 8.4中,Objective-C)。我已经为自定义单元格中的每个项目创建了IBoutlets。它似乎工作正常,但我的UIButton会随机从自定义单元格中消失。 这里是我的CellForRowAtIndexPath代码 这是我的屏幕截图 提前谢谢如果您需要更多信息,请告诉我。您在-(UITableViewCell*)tableView:(UITableView*)tableView cell f

概述
我正在使用自定义的
UITableViewCell
创建一个
UITableView
(在iOS 8.4中,Objective-C)。我已经为自定义单元格中的每个项目创建了
IBoutlets
。它似乎工作正常,但我的UIButton会随机从自定义单元格中消失。

这里是我的CellForRowAtIndexPath代码

这是我的屏幕截图




提前谢谢如果您需要更多信息,请告诉我。

您在
-(UITableViewCell*)tableView:(UITableView*)tableView cell for row索引路径:(nsindepath*)indepath
方法中做得太多了。为自定义单元格提供一种配置方法是一种很好的做法,如
-(void)configureCell
,其中将定义单元格的内容和布局。换句话说,让单元格负责(尽可能多地)其内容和布局,而不是tableview

我想这部分会引起问题:

if([AFNetworkReachabilityManager sharedManager].isReachable) {
    ...
}
特别是:

[self MakeCallAndSetImageToImageView:indexPath ToGetImageFromURL:[info valueForKey:@"copied_url"]];
我不知道这个方法的实现,但我觉得你必须看看那边,因为在检索你请求的图像时可能会出现线程问题


还有一个提示:命名类和方法的方式并不总是遵循Objective-C约定。检查
linkCell
(类)和
MakeCallAndSetImageToImageView…
(方法)。

可能的布局已损坏。尝试捕获视图层次结构。在Xcode中:调试>视图调试>捕获视图层次结构


此外,方法dequeueReusableCellWithIdentifier:forIndexPath:始终返回有效的单元格。如果(!cell){…}永远不会执行,您可以将其删除。

尝试使用此GCD块,我认为它会工作

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        //Do data fetching and calculation
        dispatch_async(dispatch_get_main_queue(), ^(void) {

            //Update UI on main thread
        });
    });

过了很长时间,我发现我的代码中有错误。我设置了
buttonview
tag
indexath.row
,也给了
button
tag同样的设置。当
didselectrowatinexpath
被调用时,我正在做

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    linkCell*cell = (linkCell*)[tableView cellForRowAtIndexPath:indexPath];
    if([selectedRow isEqual:indexPath]){
        selectedRow = nil;
//this is where i'm mistaking.
        [[cell viewWithTag: indexPath.row]setAlpha:1];
    }else{
        selectedRow = indexPath;
//this is where i'm mistaking.
        [[cell viewWithTag: indexPath.row]setAlpha:0];
    }
    [tableView reloadData];
}
因此,我将
-1
标记赋予
按钮视图
,问题就解决了。

if([selectedRow isEqual:indexPath]){
            selectedRow = nil;
            [[cell viewWithTag: -1]setAlpha:1];
        }else{
            selectedRow = indexPath;
            [[cell viewWithTag: -1]setAlpha:0];
        }

顺便说一句,感谢您提供的有价值的提示和建议。

删除并尝试
if(!cell){cell=[[linkCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@“cell”];}
将表视图单元格作为自定义单元格我应该在哪里使用此GCD?Vats块,我认为这取决于你想在哪里使用它,也就是说,你可以在你想使用后台线程和主线程的地方使用它,正如我提到的,你可以在DISPATCH_QUEUE_PRIORITY_DEFAULT中进行数据的计算和取数,并在主线程上更新你的ui。
if([selectedRow isEqual:indexPath]){
            selectedRow = nil;
            [[cell viewWithTag: -1]setAlpha:1];
        }else{
            selectedRow = indexPath;
            [[cell viewWithTag: -1]setAlpha:0];
        }