3
我的應用程序中有1列是類型數組。我只想把那個數組中的項放到我的UITableView中,但是我有一些問題,因爲numberOfRows只能得到1,因爲只有一行,但我想要統計那行的數組而不是行本身。從解析列獲取數組到UITableView
我該如何用PFQueryTableViewController實現這個功能?
下面是我的一些「實驗代碼」與此:
#import "ReviewsViewController.h"
#import "MyManager.h"
@interface ReviewsViewController() {
// Declare variables
int totalCount;
int currentReview;
}
@end
@implementation ReviewsViewController
- (id)initWithCoder:(NSCoder *)aCoder {
self = [super initWithCoder:aCoder];
if (self) {
// Setup currentReview
currentReview = 0;
// The className to query on
self.parseClassName = @"Story";
// The key of the PFObject to display in the label of the default cell stlye
self.textKey = @"objectId";
// Whether the built-in pull-to-refresh is enabled
self.pullToRefreshEnabled = YES;
// Whether the built-in pagination is enabled
self.paginationEnabled = NO;
}
return self;
}
- (PFQuery *)queryForTable {
PFQuery *query = [PFUser query];
query = [PFQuery queryWithClassName:self.parseClassName];
[query whereKey:@"Title" equalTo:[[MyManager sharedManager] selectedStory]];
return query;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
// Setup totalCount
totalCount = 1;
}
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:YES];
// Set the delegate(s) and datasource
_reviewsTableView.delegate = self;
_reviewsTableView.dataSource = self;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Table view data source
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections
return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of objects in the section
NSArray *reviews = [[NSArray alloc] init];
for (PFObject *object in [self objects]){reviews = (NSArray *)[object objectForKey:@"Reviews"];}
totalCount = reviews.count;
NSLog(@"%@%d", @"count: ", totalCount);
return totalCount;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object {
static NSString *simpleTableIdentifier = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
// Configure the cell
UILabel *reviewLabel = (UILabel *)[cell viewWithTag:10];
NSArray *reviews = [[NSArray alloc] init];
for (PFObject *object in [self objects]){reviews = (NSArray *)[object objectForKey:@"Reviews"];}
reviewLabel.text = reviews[currentReview];
currentReview++; // Increase it for next time
return cell;
}
@end
我有一種感覺,這個代碼是沒有多大用處,但我們的目標是拿到1所有數組項排成一個UITableView - 問題是,如何?
UPDATE
我的 「新」 的代碼給了我這個錯誤:
Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
以下是相應的代碼:
#import "ReviewsViewController.h"
#import "MyManager.h"
@interface ReviewsViewController() {
// Declare variables
NSArray *myObjects;
}
@end
@implementation ReviewsViewController
- (id)initWithCoder:(NSCoder *)aCoder {
self = [super initWithCoder:aCoder];
if (self) {
// The className to query on
self.parseClassName = @"Story";
// The key of the PFObject to display in the label of the default cell stlye
self.textKey = @"objectId";
// Whether the built-in pull-to-refresh is enabled
self.pullToRefreshEnabled = YES;
// Whether the built-in pagination is enabled
self.paginationEnabled = NO;
}
return self;
}
- (void)objectsDidLoad:(NSError*)error {
[super objectsDidLoad:error];
// Extract out the desired array and assign it to myObjects
myObjects = [[NSArray alloc] init];
for (PFObject *object in [self objects]){
myObjects = (NSArray*)[object objectForKey:@"Reviews"];
}
[self.tableView reloadData];
}
- (PFQuery *)queryForTable {
PFQuery *query = [PFUser query];
query = [PFQuery queryWithClassName:self.parseClassName];
[query whereKey:@"Title" equalTo:[[MyManager sharedManager] selectedStory]];
return query;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:YES];
// Set the delegate(s) and datasource
_reviewsTableView.delegate = self;
_reviewsTableView.dataSource = self;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Table view data source
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return myObjects.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath object:(PFObject *)object {
static NSString *simpleTableIdentifier = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
// Configure the cell using myObjects
UILabel *reviewLabel = (UILabel *)[cell viewWithTag:10];
reviewLabel.text = [myObjects objectAtIndex:indexPath.row];
return cell;
}
@end
在這裏你可以看到,這兩個項目在陣列中下載:
個
謝謝! Erik
看起來不錯,但應該是在queryForTable方法是什麼? – Erik 2014-10-01 18:59:36
沒關係,看我更新的問題請 – Erik 2014-10-01 19:01:28
什麼行導致錯誤?請放入斷點。 – Dehli 2014-10-01 19:08:46