1

私は何週間も何かに苦しんでいて、それは私の進歩に本当の停止をもたらしました。私はSOについて何度か質問をしました。人々は助けになりましたが、私が間違っていることを誰もクラックしていません。それはかなり単純なことのように思われるので、うまくいけば、そこにいる誰かが電球の瞬間を持ってこれを解決するでしょう。私はTWRequestを実装しており、結果は辞書に戻ってきます。結果をループしてツイートの一部を抽出し、これらの「テキスト」コンポーネントの配列を作成しています。配列のログを作成しているループをまっすぐに進んでください-_twitterTextそしてそれはうまく印刷されます。このメソッドが完了した直後は、_twitterTextがダンプされているように見えます。.hファイルに強力なプロパティとして作成し、viewdidloadにivarを作成しました。まだ喜びはありません。この配列を保持して別のメソッドで使用するにはどうすればよいですか? これが私の.hファイルです...

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
#import "CustomCell.h"
#import "AppDelegate.h"
#import <Twitter/Twitter.h>

@interface MyViewController : UITableViewController <CLLocationManagerDelegate>
{
    CLLocationManager *here;
}

@property(strong) NSDictionary *dict;
@property(strong) CLLocationManager *here;
@property (strong, nonatomic) NSMutableArray *twitterText;

- (void)fetchTweets;

@end </p>

これが私の.m実装ファイルです......

#import "MyViewController.h"

@interface MyViewController ()

@end

@implementation MyViewController
@synthesize dict;
@synthesize twitterText = _twitterText;

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    _twitterText = [[NSMutableArray alloc] init];



    here = [[CLLocationManager alloc] init];
    here.delegate = self;
    [here startUpdatingLocation];



    AppDelegate *delegate = (AppDelegate*)[[UIApplication sharedApplication]delegate];

    NSLog(@"phrase carried over is %@", delegate.a);


    [self fetchTweets];

}

- (void)fetchTweets
{
    TWRequest *request = [[TWRequest alloc] initWithURL:[NSURL URLWithString:
                                                         @"http://search.twitter.com/search.json?q=%40wimbledon"] 
                                             parameters:nil requestMethod:TWRequestMethodGET];


    [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error)
     {
         if ([urlResponse statusCode] == 200) 
         {
             // The response from Twitter is in JSON format
             // Move the response into a dictionary and print
             NSError *error;        
             NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&error];
             //NSLog(@"Twitter response: %@", dict);

             NSArray *results = [dict objectForKey:@"results"];


             //Loop through the results
 for (NSDictionary *tweet in results) {
                 // Get the tweet
                 NSString *twittext = [tweet objectForKey:@"text"];

                 // Save the tweet to the twitterText array
                 [_twitterText addObject:twittext];
             }



             NSLog(@"MY ************************TWITTERTEXT************** %@", _twitterText);


         }

         else
             NSLog(@"Twitter error, HTTP response: %i", [urlResponse statusCode]);
     }];



}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
#warning Potentially incomplete method implementation.
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
#warning Incomplete method implementation.
    // Return the number of rows in the section.
    return 5;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"MyCell";
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];



    // Configure the cell...
   //cell.venueDetails.text = [_twitterText objectAtIndex:indexPath.row]; 
   NSLog(@"MY ************************OTHER BIT THAT WONT PRINT************** %@", _twitterText);
    return cell;
}
4

1 に答える 1

1

したがって、ここでの問題は、渡した完了ハンドラーが-[TWTweet performRequestWithHandler:]、ネットワーク接続が完了してサーバーが要求に応答するまで起動しない(起動できない)ことです。完了するまでに数百ミリ秒または数秒かかる場合があります。(またはそれは決して起こらないかもしれません)。

その間、UITableViewはそれ自体を描画したいので、セクション/行の数を尋ね、次に各行のセルを尋ねます。したがって、テーブルビューで要求されたら、その時点で描画する必要のある実際の行数を返す必要があります。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return [self.twitterText count]; // the actual number of rows we have right now
}

したがって、必要な次のステップは、データが実際にサーバーから入ったときにテーブルをリロードすることです。これにより、テーブルビューでセクションと行の数を再度要求し、次に各セクションと行のセルを要求するように求められます。したがって、すべてのデータを処理した後の完了ブロックのどこかで、これを行う必要があります。

dispatch_async(dispatch_get_main_queue(), ^{

  // you'll need an outlet to the UITableView
  // here I assume you call that 'tableView'
  // then just ask it to reload on the main thread

  [self.tableView reloadData];

});

私はそれが役立つことを願っていますか?

于 2012-07-17T20:49:22.320 に答える