0

我有一个正在开发的应用程序,其中包含表格视图中的用户时间线。这将是每个应用程序中相同的用户时间线。我已经对此进行了编码,并且效果很好。我的问题是,当我在调用中将 API 版本从 1 更改为 1.1 时,它停止工作。所有推文都将通过推文表进行,因此我不需要身份验证。除了在调用中更改 API 版本之外,我是否需要添加代码,或者设置授权只是为了使用新 API 显示时间线?除了简单地显示单个用户时间线并使用推文表来响应之外,我没有添加任何功能。我附上了我的代码。任何帮助都会很棒。谢谢你。

- (void)fetchTweets
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://api.twitter.com/1/statuses/user_timeline.json?include_rts=false&screen_name=johnnelm9r&count=100"]];

        if (data == nil)
        {

        }

        else
        {
            NSError *error;

            tweets = [NSJSONSerialization JSONObjectWithData:data
                                                     options:kNilOptions
                                                       error:&error];
        }

        dispatch_async(dispatch_get_main_queue(), ^{
            [self.twitterTableView reloadData];
        });

    });

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(reachabilityChanged:)
                                                 name:kReachabilityChangedNotification
                                               object:nil];
    self.reachability = [Reachability reachabilityWithHostName:@"www.apple.com"];
    [self.reachability startNotifier];
}
4

1 回答 1

0

这就是我最终想出的。它对我需要它做的事情来说很好。希望它也可以帮助其他人。

- (void)fetchTweets
{
twitterLoader.animationImages = [NSArray arrayWithObjects:
                                 [UIImage imageNamed:@"StatusIndicator.png"],
                                 [UIImage imageNamed:@"StatusIndicator1.png"],
                                 [UIImage imageNamed:@"StatusIndicator2.png"],
                                 [UIImage imageNamed:@"StatusIndicator3.png"],
                                 [UIImage imageNamed:@"StatusIndicator4.png"],
                                 [UIImage imageNamed:@"StatusIndicator5.png"],
                                 [UIImage imageNamed:@"StatusIndicator6.png"],
                                 [UIImage imageNamed:@"StatusIndicator7.png"],
                                 [UIImage imageNamed:@"StatusIndicator8.png"],
                                 [UIImage imageNamed:@"StatusIndicator9.png"],
                                 [UIImage imageNamed:@"StatusIndicator10.png"],
                                 [UIImage imageNamed:@"StatusIndicator9.png"],
                                 [UIImage imageNamed:@"StatusIndicator8.png"],
                                 [UIImage imageNamed:@"StatusIndicator7.png"],
                                 [UIImage imageNamed:@"StatusIndicator6.png"],
                                 [UIImage imageNamed:@"StatusIndicator5.png"],
                                 [UIImage imageNamed:@"StatusIndicator4.png"],
                                 [UIImage imageNamed:@"StatusIndicator3.png"],
                                 [UIImage imageNamed:@"StatusIndicator2.png"],
                                 [UIImage imageNamed:@"StatusIndicator1.png"],
                                 nil];

twitterLoader.animationDuration = 0.8;
[twitterLoader startAnimating];

ACAccountStore *store = [[ACAccountStore alloc] init];
ACAccountType *twitterAccountType =
[store accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];

    //  Request permission from the user to access the available Twitter accounts
[store requestAccessToAccountsWithType:twitterAccountType
                               options:nil
                            completion:^(BOOL granted, NSError *error)
 {
 if (!granted)
     {
     NSLog(@"User rejected access to the account.");
     }

 else
     {
     [twitterLoader startAnimating];

     NSArray *twitterAccounts =
     [store accountsWithAccountType:twitterAccountType];

     if ([twitterAccounts count] > 0)
         {
         ACAccount *account = [twitterAccounts objectAtIndex:0];
         [twitterLoader startAnimating];

         NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
         [params setObject:@"johnnelm9r" forKey:@"screen_name"];
         [params setObject:@"100" forKey:@"count"];
         [params setObject:@"0" forKey:@"include_entities"];
         [params setObject:@"0" forKey:@"include_rts"];

             //  The endpoint that we wish to call
         NSURL *url =
         [NSURL
          URLWithString:@"http://api.twitter.com/1.1/statuses/user_timeline.json"];

         SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeTwitter
                                                 requestMethod:SLRequestMethodGET
                                                           URL:url
                                                    parameters:params];


             // Attach the account object to this request
         [request setAccount:account];

         [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error)
          {
          if (!responseData)
              {
              NSLog(@"%@", error);
              }

          else
              {
              NSError *jsonError;
              tweets = [NSJSONSerialization JSONObjectWithData:responseData
                                                       options:NSJSONReadingMutableLeaves
                                                         error:&jsonError];
              if (tweets)
                  {
                  NSLog(@"%@", tweets);
                  [self.twitterTableView reloadData];

                  [twitterLoader stopAnimating];
                  }

              else
                  {
                  NSLog(@"%@", jsonError);
                  }
              }
          }];
         [self.twitterTableView reloadData];
         [twitterLoader stopAnimating];
         }
     }
 }];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(reachabilityChanged:)
                                             name:kReachabilityChangedNotification
                                           object:nil];
self.reachability = [Reachability reachabilityWithHostName:@"www.apple.com"];
[self.reachability startNotifier];
}

我还添加了一个简单的加载器和可达性。如果您不需要它,只需删除底部的 NSNotification。

并确保添加

账户和社会框架

并将它们的头文件导入到您使用它的 .m 文件中。

祝你好运!

于 2013-01-02T05:50:46.657 回答