ios - NSSortDescriptor 不更新 UITableView

标签 ios objective-c uitableview nssortdescriptor

我正在尝试使用 UISegmentedControl 中的 NSSortDescriptor 对我的表格 View 进行排序。当我记录要排序的数组时,它显示了正确的排序顺序,但在调用 [self.tableView reloadData] 后 tableview 没有更新;

数据来自一个由 json 提要填充的数组。我没有使用 NSObjects 来显示 tableview,它都是从 NSArray 填充的。见下面的代码:

@interface LinksTableViewController (){

    NSArray *data;

}

@property (strong, nonatomic) NSArray *links;
@property (strong, nonatomic) NSArray *tNames;
@property (strong, nonatomic) NSArray *dThor;
@property (strong, nonatomic) NSArray *theLinker;
@property (strong, nonatomic) NSArray *anText;
@property (strong, nonatomic) NSArray *noDo;

@end

@implementation LinksTableViewController



- (void)viewDidLoad {
    [super viewDidLoad];

    UISegmentedControl *statFilter = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"STAT1", @"STAT2", @"STAT3", @"STAT4", nil]];
    [statFilter sizeToFit];
    [statFilter addTarget:self action:@selector(MySegmentControlAction:) forControlEvents: UIControlEventValueChanged];
    self.navigationItem.titleView = statFilter;

    [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(refreshdelay:) userInfo:nil repeats:NO];

}

- (void)MySegmentControlAction:(UISegmentedControl *)segment
{
    NSArray *arrayToSort = data;

    if (segment.selectedSegmentIndex == 0)
    {

        NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"pda" ascending:NO];
        arrayToSort = [arrayToSort sortedArrayUsingDescriptors:@[sortDescriptor]];

        NSLog(@"%@", arrayToSort);

    }
    else if (segment.selectedSegmentIndex == 1)
    {


    }
    else if (segment.selectedSegmentIndex == 2)
    {

    }
    else if (segment.selectedSegmentIndex == 3)
    {

    }

    [self.tableView reloadData];
}

-(void)refreshdelay:(NSTimer*)timer
{

    NSString *myString = [links absoluteString];
    NSURL *JSONData = [NSURL URLWithString:myString];
    NSData *datas = [NSData dataWithContentsOfURL:JSONData];
    NSURLRequest *request = [NSURLRequest requestWithURL:JSONData];

    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    operation.responseSerializer = [AFJSONResponseSerializer serializer];
    operation.responseSerializer.acceptableContentTypes = [operation.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

        NSArray *jsonResult = [NSJSONSerialization JSONObjectWithData:datas options:kNilOptions error:nil];

        data = jsonResult;
        NSMutableArray *names = [NSMutableArray array];
        NSMutableArray *bLinks = [NSMutableArray array];
        NSMutableArray *daThor = [NSMutableArray array];
        NSMutableArray *bsLink = [NSMutableArray array];
        NSMutableArray *ancTxt = [NSMutableArray array];
        NSMutableArray *folLowd = [NSMutableArray array];


        for (id itemfeed in jsonResult){
            [names addObject:[NSString stringWithFormat:@"%@", itemfeed[@"ut"]]];
            [bsLink addObject:[NSString stringWithFormat:@"%@", itemfeed[@"uu"]]];
            [bLinks addObject:[NSString stringWithFormat:@"%@", itemfeed[@"upa"]]];
            [daThor addObject:[NSString stringWithFormat:@"%@", itemfeed[@"pda"]]];
            [ancTxt addObject:[NSString stringWithFormat:@"%@", itemfeed[@"lt"]]];
            [folLowd addObject:[NSString stringWithFormat:@"%@", itemfeed[@"lf"]]];
            self.links = names;
            self.tNames = bLinks;
            self.dThor = daThor;
            self.theLinker = bsLink;
            self.anText = ancTxt;
            self.noDo = folLowd;
        }

        [self.tableView reloadData];


    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {


    }];

    [operation start];

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    static NSString *Cellidentifier = @"DataTableCellId";
    LICustomCell *cell = (LICustomCell *) [tableView dequeueReusableCellWithIdentifier:Cellidentifier];
    if (cell == nil) {

        cell = [[LICustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:Cellidentifier];

        NSArray *nib = [[NSBundle mainBundle]loadNibNamed:@"LiCellView" owner:self options:nil];
        cell = nib[0];

        NSString *sLink = self.links[indexPath.row];
        NSString *aLink = self.tNames[indexPath.row];
        NSString *aDa = self.dThor[indexPath.row];
        NSString *theInk = self.theLinker[indexPath.row];
        NSString *thAnk = self.anText[indexPath.row];
        NSString *fLink = self.noDo[indexPath.row];

        cell.ageLable.text = theInk;

    }


    return cell;
}

最佳答案

看起来您的 tableView 的数据位于 6 个不同的数组中。

        NSString *sLink = self.links[indexPath.row];
        NSString *aLink = self.tNames[indexPath.row];
        NSString *aDa = self.dThor[indexPath.row];
        NSString *theInk = self.theLinker[indexPath.row];
        NSString *thAnk = self.anText[indexPath.row];
        NSString *fLink = self.noDo[indexPath.row];

您不应该对所有这些进行排序吗?由于您的代码现在还不清楚 arrayToSort 如何连接到您的 tableView 的数据模型。您有 NSArray *arrayToSort = data;,但不清楚数据的初始化位置或设置位置(似乎您想在 JSON 竞争 block 中设置)。你还需要调用 [self.tableView reloadData];在 MySegmentControlAction 的末尾。

您可以创建一个 NSObject 的子类,它具有 6 个 NSString 属性,将其称为 MyObject(但更具描述性)。然后做类似的事情:

for (id itemfeed in jsonResult){
            MyObject *object = [[MyObject alloc]init];
            object.sLink = [NSString stringWithFormat:@"%@", itemfeed[@"ut"]];
            object.aLink = [NSString stringWithFormat:@"%@", itemfeed[@"uu"]];
            ...

           [self.data addObject:object];

        }

在 JSON 竞赛 block 中。

然后您更改 cellForRowAtIndexPath 以包含类似的内容

MyObject *object = [self.data objectAtIndex:indexPath.row]
cell.ageLable.text = object.theInk;

如果你走这条路,你还需要更新:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"pda" ascending:NO];

特别是 @"pda"给你在 NSObject 子类中命名的属性。 @"dThor"如果你遵循我使用的命名。

关于ios - NSSortDescriptor 不更新 UITableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33599164/

相关文章:

ios - 如何设置 UIScrollView 的子类来响应触摸事件?

ios - 替换模态视图后面的 rootViewController

ios - 如何使用 Swift 更新 UITableView?

iPhone sdk如何在UITableView中添加带有第一个和最后一个数组计数的UIButton?

android - Cordova 插件白名单请求 Cordova ios 4 失败

iOS 开发者构建与分发构建

ios - 检测使用主线程的时间百分比

ios - 通过蓝牙 4.0 LE 发送图像文件

objective-c - 了解 Xcode 中的 Instruments,测试泄漏

html - 如何在 Objective C 中的 NSMutableArray 中添加 HTML 标签