2009-05-14 13 views
0

iPhone Appアイコンのバッジ番号を作成するためにいくつかのコードを使用しようとしています。iPhone SDK:UITableViewの各オブジェクトのID番号を確認し、それに応じてバッジ番号を変更してください

私はこのコードを使用することができますが、私が使用しているコードはかなり悪く、簡単にはうまくいくかもしれませんが、これを行うための知識はありません。

これは、それはやっているものです...

  1. 取得はのUITableViewの最初のメッセージから、ユーザの「ID」です。次に、最後に読み込まれたときに最初のオブジェクトから格納されたIDと照合して、バッジ番号1を作成します。
  2. 次に、メッセージの2番目のIDが格納されているかどうかを確認します。そうでない場合は、自動的にIDを確認し、追加された私はそれがやりたい「1」バッジ番号に正しいとの最初のポストまでのバッジ番号2
  3. などなど。

を行いますIDが見つかりましたが、私はコーディングについてあまり確かではありません。

助けがあれば助かります。

おかげ

は(コードは以下の通りです:)

 NSDictionary* tweetValues = [[NSDictionary alloc] init]; 
    tweetValues = [tweets objectAtIndex:1]; 
    NSString *newStatusID = [[tweetValues objectForKey:@"id"] stringValue]; 
    NSString *oldStatusID = [[NSUserDefaults standardUserDefaults] stringForKey:@"latestID"]; 
    [UIApplication sharedApplication].applicationIconBadgeNumber = 0; 
    if([newStatusID isEqualToString:oldStatusID]){ 
     [UIApplication sharedApplication].applicationIconBadgeNumber = 0; 
    } else { 
     tweetValues = [tweets objectAtIndex:2]; 
     newStatusID = [[tweetValues objectForKey:@"id"] stringValue]; 

     if ([newStatusID isEqualToString:oldStatusID]){ 
      [UIApplication sharedApplication].applicationIconBadgeNumber = 1; 
     }else{ 

      tweetValues = [tweets objectAtIndex:3]; 
      newStatusID = [[tweetValues objectForKey:@"id"] stringValue]; 

      if ([newStatusID isEqualToString:oldStatusID]){ 
       [UIApplication sharedApplication].applicationIconBadgeNumber = 2; 
      }else{ 
       [UIApplication sharedApplication].applicationIconBadgeNumber = 3; 
      } 
     } 

    } 

答えて

0

私はあなたがしようとしているかを正確にわからないんだけど、あなたのコードを見て、私はあなたがforループを使用する必要があると思います。

また、コードの最初の行はリークです。あなたが何をしようとしているのか分かりません。私が見る限り、ここに空の辞書を作成する必要はありません。

tweetValues(tweetValues = [tweets objectAtIndex:1];)を取得する行も奇妙です。配列はzero-indexedなので、配列内の2番目のオブジェクトを取得しています。あなたが取得したい場合は、まずあなたが呼び出す必要があります:私は私が正しくあなたのコードを解釈を願ってい

[UIApplication sharedApplication].applicationIconBadgeNumber = 0; 

NSString *oldStatusID = [[NSUserDefaults standardUserDefaults] stringForKey:@"latestID"]; 
for (NSDictionary *tweetValues in tweets) { // Iterate over all the tweetValues in tweets (assume tweets exist?) 

    NSString *newStatusID = [[tweetValues objectForKey:@"id"] stringValue]; 

    if ([oldStatusID isEqualToString:newStatusID]) { 

     [UIApplication sharedApplication].applicationIconBadgeNumber++; // Increase the badge number by 1 
    } 
} 

[tweets objectAtIndex:0];

私はあなたのコードをリファクタリングしていた場合、私はおそらくのような何かをするだろう。そうでない場合は、より多くのコンテキストが役に立つかもしれません。

+0

をちょっとそこ、あなたが示されてきたものバッジ番号を完全に取得するのはかなり良いですが、保存されたIDまでの値のバッジ番号を増やすだけです。 ビューが読み込まれると、最初のIDがユーザーのデフォルトに追加されます。その後、再び読み込まれると、IDに再び到達するまでオブジェクトの数が(バッジ番号として)表示されます。そして、それが再びロードされると、前と同じobjectAtIndex:0だったobjectAtIndex:4のIDまで、バッジ番号をオブジェクトの数として表示して同じことを行います。そのため、バッジに 'その中に4 '。 – Domness

0

私が働いているように見えるのフォローをやってしまった:

NSDate *dateRefreshed = [[NSUserDefaults standardUserDefaults] objectForKey:@"dateRefreshed"]; 

    [[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:@"dateRefreshed"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

    [UIApplication sharedApplication].applicationIconBadgeNumber = 0; 

    for (NSDictionary *tweetValues in tweets) { // Iterate over all the tweetValues in tweets (assume tweets exist?) 

     NSDate *dates = [tweetValues objectForKey:@"created_at"]; 

     NSTimeInterval sincePostDate = [[NSDate date] timeIntervalSinceDate: dates];  
     NSTimeInterval sinceNow = [[NSDate date] timeIntervalSinceDate: dateRefreshed]; 
     int timeDiff = sincePostDate; 
     int timeSinceNow = sinceNow; 

     if (timeDiff <= timeSinceNow){ 

      [UIApplication sharedApplication].applicationIconBadgeNumber++; // Increase the badge number by 1 
     } 

    } 

誰もが任意のより良いアイデアを持っている場合は、コードを投稿すること自由に感じなさい:)

関連する問題