全局变量无法正常工作

时间:2014-03-02 09:12:48

标签: ios objective-c uitableview variables global-variables

在我的视图控制器的主文件中,我为名为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时,它们总是NSLog的正确计数为2.

这是我的问题。再往下,我有一个方法实现,需要使用_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];


}

2 个答案:

答案 0 :(得分:2)

findObjectsInBackgroundWithBlock:异步方法。大概 在调用完成块之前,numberOfRowsInSection:被称为 并分配了一个新阵列。

您可能应该在完成结束时致电[self.tableView reloadData] 阻止使用获取的数据更新表视图。

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

答案 1 :(得分:0)

你应该使用正确的setter&amp;你声明的那个属性的getter。

我敢打赌,如果你改变这一行:

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

到此:

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

在您的区块功能中,您可能会有更好的运气。