UITableView仅显示来自Feed的1个单元格。 RestKit

时间:2014-10-23 07:54:56

标签: ios objective-c iphone restkit

我正在使用RestKit来提取新闻源,它可用于提取Feed。我使用了Master Detail视图,它在控制台中显示了多个Feed,但只显示了UITableView中的1个Feed(仅限1个单元格)

这是我的代码

    @interface MasterViewController (){

    NSArray *feedObjects;
    NSMutableArray *feedArray;

}

@property NSMutableArray *objects;
@end

@implementation MasterViewController

- (void)awakeFromNib {
    [super awakeFromNib];
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
        self.clearsSelectionOnViewWillAppear = NO;
        self.preferredContentSize = CGSizeMake(320.0, 600.0);
    }
}

- (void)viewDidLoad {


    [super viewDidLoad];
    feedArray = [[NSMutableArray alloc]init];

    [self configureRestKit];
    // Do any additional setup after loading the view, typically from a nib.
    self.navigationItem.leftBarButtonItem = self.editButtonItem;

    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)];
    self.navigationItem.rightBarButtonItem = addButton;
    self.detailViewController = (DetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(RKResponseDescriptor *)responseDescriptor {

    RKObjectMapping *bodyMapping = [RKObjectMapping mappingForClass:[BaseClass class]];
    [bodyMapping addAttributeMappingsFromArray:@[@"body",@"title"]];

    RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:bodyMapping method:RKRequestMethodAny pathPattern:nil keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

    return responseDescriptor;
}

-(void)configureRestKit{

    NSURL *baseURL = [NSURL URLWithString:@"http://urlExample"];
    NSURLRequest *request = [NSURLRequest requestWithURL:baseURL];

    RKObjectRequestOperation *objectRequestOperation = [[RKObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[[self responseDescriptor]]];

    [objectRequestOperation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {

        feedObjects = mappingResult.array;
        [feedArray addObject:feedObjects];
        [self.tableView reloadData];

        RKLogInfo(@"Load collection of Feeds: %@", mappingResult.array);

    } failure:^(RKObjectRequestOperation *operation, NSError *error) {
        RKLogError(@"Operation failed with error: %@", error);
    }];

    [objectRequestOperation start];
}

#pragma mark - Table View

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return feedArray.count;
}

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

    NSMutableArray *feedarray = feedArray[indexPath.row];
    BaseClass *feedO = feedarray[0];

    cell.textLabel.text = [NSString stringWithFormat:@"%@",feedO.title];

    return cell;
}

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the specified item to be editable.
    return YES;
}

}

如果有人能帮助我,那会很棒,我已经尝试将mappingResults添加到NSArray而不是NSMutableArray,但这会以我尝试的方式打破程序。

由于

1 个答案:

答案 0 :(得分:1)

当然它确实 - 你在这里只向你的数组添加一个对象:

[feedArray addObject:feedObjects];

这意味着你的函数返回行数:

feedArray.count == 1

你想要做的是将所有结果分别添加到你的NSMutableArray中,或者甚至使用你从响应中直接获得的NSArray作为数据源 - 所以你有一个只有1个深度级别的NSArray。

[feedArray addObjectsFromArray:feedObjects]

实际上,在您的情况下,我没有理由同时保留feedObjects和feedArray,您可以丢弃feedArray并在任何地方使用feedObjects。