全局变量工作不正常



在视图控制器的主文件中,我为名为finalStringsArray:的NSArray对象创建了一个属性

@property (strong, nonatomic) NSArray *finalStringsArray;

然后在viewDidLoad中,我确保初始化对象:

self.finalStringsArray = [[NSArray alloc]init];

在viewDidLoad方法的实现过程中,我向服务器查询数据,清除服务器像空白一样发送给我的一些额外垃圾,然后将我的完美字符串放在我的finalStringsArray数组中:

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
NSString *parseString = [[NSString alloc]initWithFormat:@"%@", objects];

NSString *cURL=[self stringBetweenString:@"=" andString:@")" withstring:parseString];

NSString *newString = [cURL stringByReplacingOccurrencesOfString:@" " withString:@""];
NSString *newString2 = [newString stringByReplacingOccurrencesOfString:@"(" withString:@""];
NSString *newString3 = [newString2 stringByReplacingOccurrencesOfString:@"\n" withString:@""];

_finalStringsArray = [newString3 componentsSeparatedByString:@","];

int index;
for(index = 0; index < _finalStringsArray.count; index++) {
NSString *string = [[NSString alloc]init];

string = _finalStringsArray[index];

NSLog(@"Count: %d", _finalStringsArray.count);
}
NSLog(@"Count: %d", _finalStringsArray.count);

} }

];}

上面代码中所有重要的内容都是这样的声明:_finalStringsArray = [newString3 componentsSeparatedByString:@","];

这将我的最终字符串添加到我的_finalStringsArray数组对象中。您会注意到,我正在NSLogging我的数组的count属性:NSLog(@"Count: %d", _finalStringsArray.count);

当我执行这些NSLog时,它们总是具有正确计数2的NSLog。

这是我的问题。再往下看,我有一个方法实现,它也需要使用_finalStringsArray的count属性。但由于某种原因,它总是NSLogs为"0",我不知道为什么。

下面是我的viewDidLoad下面的3个方法实现。我需要能够在的方法实现中访问_finalStringsArray的count属性-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section:

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
NSLog(@"all good string count3: %d", _finalParseStrings.count);
}

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

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSLog(@"all good string count5: %d", [self.finalStringsArray count]);

return [self.finalStringsArray count];

}

findObjectsInBackgroundWithBlock:是一个异步方法。可能在调用完成块之前调用numberOfRowsInSection:并分配一个新的阵列。

您可能应该在完成时调用[self.tableView reloadData]块,以使用提取的数据更新表视图。

我不知道PFQuery是否调用了主线程上的完成块。如果没有,则必须将数据源分配和reloadData调用分派到主队列。

您应该使用正确的setter&您声明的属性的getter。

我敢打赌,如果你改变这条线:

_finalStringsArray = [newString3 componentsSeparatedByString:@","];

到此:

self.finalStringsArray = [newString3 componentsSeparatedByString:@","];

在你的块函数中,你可能会有更好的运气。

相关内容

  • 没有找到相关文章

最新更新