2014-03-02 93 views
0

在我的视图控制器的主要文件,我创建了一个属性名为finalStringsArray一个NSArray对象:全局变量工作不正常

@property (strong, nonatomic) NSArray *finalStringsArray;

然后在viewDidLoad中,我一定要初始化对象

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

再往下viewDidLoad方法的实现,我查询我的数据服务器,摆脱一些服务器发送我像空白额外的垃圾,然后我把我里面我完美的琴弦阵列:

[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);

当我执行这些NSLogs,他们总是用的NSLog 2.

正确的计数这里是我的问题,但。再往下,我有一个方法实现,需要使用_finalStringsArray的count属性。但由于某种原因,它总是NSLogs为“0”,我无法弄清楚原因。

下面是我的viewDidLoad下的3个方法实现。我需要能够访问的_finalStringsArray计数属性的方法实施 -(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]; 


} 
+0

简直没有用全局变量(特别是当你刚刚开始时)有很多地方可以说。简单地说,学会使用单身。毕竟,应用程序是一个单例,它是“保持一到两个”全球需要“概念的一个好地方。所有你需要做的就是添加一个属性到AppDelegate.h - 然后在你想要的任何地方使用它。再简单不过了。你可以在你的前缀文件中包含一个方便的宏:** #define APP((AppDelegate *)[[UIApplication sharedApplication] delegate])** – Fattie

回答

2

findObjectsInBackgroundWithBlock:是一个异步方法。可能 numberOfRowsInSection:被称为之前完成块已被称为 并分配了一个新的数组。

您可能应该在完成 块的末尾呼叫[self.tableView reloadData]以更新带有获取数据的表视图。

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

+0

做到了!非常感谢您花时间提供帮助。 – user3344977

0

你应该使用正确的二传手& getter方法,你宣称财产。

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

这样::

如果更改此行中我敢打赌

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

在你的格挡功能,你可能有更好的运气。

+0

我希望你的解决方案能够工作,但事实并非如此。它仍然是NSLogging,计数为0. as self.finalStringsArray和_finalStringsArray。我已经尝试了count方法和count属性。任何其他想法? – user3344977