簡體   English   中英

全局變量無法正常工作

[英]Global variable is not working correctly

在我的視圖控制器的主文件中,我為名為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];


}

findObjectsInBackgroundWithBlock:是一個異步方法。 可能是numberOfRowsInSection:在調用完成塊並分配新數組之前調用。

您可能應該在完成塊的末尾調用[self.tableView reloadData]以使用獲取的數據更新表視圖。

我不知道PFQuery是否在主線程上調用了完成塊。 如果沒有,則必須將數據源分配和reloadData調用分派給主隊列。

您應該為您聲明的屬性使用正確的setter和getter。

我敢打賭,如果你改變這一行:

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

對此:

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

在你的區塊功能中,你可能會有更好的運氣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM