NSSortDescriptor不会更新UITableView

时间:2015-11-08 21:20:37

标签: ios objective-c uitableview nssortdescriptor

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

数据来自一个由json feed填充的数组。我没有使用NSObject来显示tableview,它全部来自NSArray。请参阅以下代码:

    java -jar  custom-agent.jar --outdir ./out --exec ./build_wrapper.sh                              [10:18:53]
Picked up JAVA_TOOL_OPTIONS: -javaagent:/Users/dev/TestAgent/project/custom-agent.jar=OUTDIR=/Users/dev/TestAgent/project/./out 
objc[30474]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/bin/java and /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined.
Buildfile: /Users/dev/TestAgent/project/build.xml

build-e:

init:
    [mkdir] Created dir: /Users/dev/TestAgent/project/bin

build:

BUILD FAILED
/Users/dev/TestAgent/project/build.xml:47: The following error occurred while executing this line:
/Users/dev/TestAgent/project/build.xml:32: Class org.eclipse.jdt.core.JDTCompilerAdapter could not be loaded because of an invalid dependency.

Total time: 2 seconds
abnormal termination, exit code: 1

1 个答案:

答案 0 :(得分:1)

看起来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竞赛区块中设置该数据)。你还需要调用[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比赛区。

然后更改cellForRowAtIndexPath以包含类似

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

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

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

特别是@" pda"无论你在NSObject子类中命名属性。 @" dThor"如果你按照我使用的命名。