UITableView在最新的iOS更新上出现故障

时间:2014-09-09 00:41:08

标签: objective-c uitableview ios7

我的客户在他们的iPad上看到了这个有最新更新。

我的模拟器显示它很好。应用程序中的其他视图控制器没有此问题。这个VC有一个连接了tableview的NIB。

bad tableview

基类:

    @implementation HVPickerViewController

- (id)init {
    self = [self initWithNibName:@"HVPickerViewController" bundle:nil];
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelTapped)];

    [self fetchObjects];

    CGRect f = self.tableView.frame;
    f.origin.y += 40;
    self.tableView.frame = f;
}

- (NSString *)path {
    return nil;
}

- (NSString *)keyPath {
    return nil;
}

- (RKObjectMapping *)RKObjectMapping {
    return nil;
}

- (void)assignMappingResult:(RKMappingResult *)result {
    NSLog(@"mappingResult:%@", result);
    self.objects = result.array;
    [self.tableView reloadData];
    [SVProgressHUD dismiss];
}

- (void)fetchObjects {
    NSString *path = [self path];

    if (path) {
        NSIndexSet *statusCodeSet = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful);
        RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:[self RKObjectMapping]
                                                                                           pathPattern:path
                                                                                               keyPath:[self keyPath]statusCodes:statusCodeSet];

        NSString *baseString = [NSString stringWithFormat:@"%@%@?token=%@", BASE_URL, path, [NSUserDefaults authToken]];
        NSLog(@"fullURLString: %@", baseString);
        NSURL *url = [NSURL URLWithString:baseString];

        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        RKObjectRequestOperation *operation = [[RKObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[responseDescriptor]];
        [operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
            [self assignMappingResult:mappingResult];
        } failure:^(RKObjectRequestOperation *operation, NSError *error) {
            [operation handleFailedRequest];
            if (self.retries < 5) {
                self.retries++;
                [self fetchObjects];
            } else {
                NSLog(@"Error: %@", error);
                NSLog(@"Response: %@", operation.HTTPRequestOperation.responseString);
                [SVProgressHUD showErrorWithStatus:@"Please check your connection and reload this screen"];
            }
        }];
        NSOperationQueue *q = [[NSOperationQueue alloc] init]; [q addOperation:operation];
    }
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.objects.count;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (id)objectForIndexPath:(NSIndexPath *)indexPath {
    return self.objects[indexPath.row];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *identifier = @"CustomerPickerCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
    }

    id obj = [self objectForIndexPath:indexPath];

    cell.textLabel.text = [obj name];

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    id obj = self.objects[indexPath.row];
    [self.delegate objectPicked:obj];
}


- (void)cancelTapped {
    [self.delegate pickingCancelled];
}

子类:

- (void)assignMappingResult:(RKMappingResult *)result {
    NSMutableArray *trainees = [NSMutableArray array];
    for (HVUser *u in result.array) {
        if (![u isStaff]) {
            [trainees addObject:u];
        }
    }

    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
    self.objects = [NSMutableArray arrayWithArray:[trainees sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]]];

    [SVProgressHUD dismiss];
    [self.tableView reloadData];

    NSString *s = [NSString stringWithFormat:@"%d trainees from %d users", (int)trainees.count, (int)result.array.count]; //This DOES show up in my client's log
    NSLog(@"CREATE LOSS ITEM trainees: %@", trainees);
    NSLog(@"CREATE LOSS ITEM users: %@", result.array);

    [SVProgressHUD showSuccessWithStatus:s];
}

- (NSString *)path {
    return @"/api/v1/users.json";
}

- (NSString *)keyPath {
    return @"users";
}

- (RKObjectMapping *)RKObjectMapping {
    return [HVMappingProvider userMapping];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.allowsMultipleSelectionDuringEditing = YES;
    [self.tableView setEditing:YES animated:YES];

    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(doneTapped)];
    self.navigationItem.rightBarButtonItem = doneButton;
}

- (void)doneTapped {
    NSArray *selectedRows = [self.tableView indexPathsForSelectedRows];
    if (selectedRows.count > 0) {
        NSMutableArray *trainees = [NSMutableArray array];
        for (NSIndexPath *selectionIndex in selectedRows) {
            HVUser *u = self.objects[selectionIndex.row];
            [trainees addObject:u];
        }
        [self.delegate objectsPicked:trainees];
    } else {
        [SVProgressHUD showErrorWithStatus:@"Please make at least one selection."];
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];

    HVUser *u = self.objects[indexPath.row];

    cell.textLabel.text = u.name;

    if (u.avatarURL && u.avatarURL.length > 0) {
        [cell.imageView setImageWithURL:[NSURL URLWithString:u.avatarURL] placeholderImage:nil];
    } else {
        cell.imageView.image = nil;
    }

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

}

- (double)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 88;
}

1 个答案:

答案 0 :(得分:0)

我改变了

  • (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 返回88; }

根据编译器警告使用CGFloat。

作品。