NSSortDescriptor 不更新 UITableView
NSSortDescriptor doesn't update UITableView
我正在尝试使用 UISegmentedControl 中的 NSSortDescriptor 对我的表格视图进行排序。当我记录要排序的数组时,它显示了正确的排序顺序,但是在调用 [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 竞赛块中设置)。您还需要调用 [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" 如果你遵循我使用的命名方式。
我正在尝试使用 UISegmentedControl 中的 NSSortDescriptor 对我的表格视图进行排序。当我记录要排序的数组时,它显示了正确的排序顺序,但是在调用 [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 竞赛块中设置)。您还需要调用 [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" 如果你遵循我使用的命名方式。