- (void)viewDidLoad
{
[super viewDidLoad];
[VenueManager searchNear:@"Orlando"
onLoad:^(NSArray *objects) {
self.locationObjects = objects;
[self.tableView reloadData];
} onError:^(NSError *error) {
NSLog(@"%@", error);
}];
}
此代码在我的 UITableViewController 类的 viewDidLoad 方法中。它是使用 RestKit 从 FourSquare 解析 JSON 文件的起点。我把头发拉了出来,因为在我放 [self.tableView reloadData]; 之前,我无法让对象显示在我的表视图中。如果没有那个调用,应用程序甚至都不会点击我- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)
,因为在块完成后执行 locationObjects 将为零。
在我调试它之前,当我在块中时 self.locationsObjects = objects 起作用(顺便说一下,我对块非常不熟悉)。一旦我走出障碍,调试器就会说 locationObjects 为零,即使它说它有 30 个对象,就像我在赋值语句处有断点时对象所做的一样。
有人可以帮助我了解这里发生了什么。
附加信息:
现在一切正常,或者似乎正常工作我的表填充了来自 JSON 文档的对象请求。最初我在普通的 ViewController 中做同样的事情,并试图设置objects
from 块等于locationObjects
. 然后使用一种prepareForSegue
方法,我试图以locationObjects
我从众多教程中学到的标准方法将其传递给 tableViewController。我会收到一个 SIGBAT 错误。由于发送到表视图控制器的选择器无法识别,线程将终止。通过调试,我会发现locationObjects
prepareForSegue 方法中可能为零。这是 viewController 文件中的代码。
此外,我会在这里收到一个警告,locationTableViewController.locationObjects = self.locationObjects;
说有关将 NSArray 类型的指针分配给强 NSArray 或类似的东西(我已经改变了很多,试图让代码正常工作并删除了一些故事板资产,所以我不是 100%确定措辞)。
@implementation CoffeeShopViewController
@synthesize venueCountLable = _venueCountLable;
@synthesize locationObjects = _locationObjects;
- (void)viewDidLoad
{
[super viewDidLoad];
[VenueManager searchNear:@"Orlando"
onLoad:^(NSArray *objects) {
self.venueCountLable.text = [NSString stringWithFormat:@"%d", objects.count];
self.locationObjects = objects;
} onError:^(NSError *error) {
NSLog(@"%@", error);
}];
}
- (void)viewDidUnload
{
[self setVenueCountLable:nil];
[super viewDidUnload];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"locationTableSegue"])
{
LocationTableViewController *locationTableViewController = segue.destinationViewController;
locationTableViewController.locationObjects = self.locationObjects;
}
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
@end