【问题标题】:iPhone SDK: Checking the ID number for each object in a UITableView and change the badge number accordinglyiPhone SDK:检查 UITableView 中每个对象的 ID 号并相应地更改徽章号
【发布时间】:2010-10-26 07:15:46
【问题描述】:

我正在尝试使用一些代码为 iPhone 应用图标创建一个徽章编号。

我可以成功地做到这一点,但是我正在使用的代码(如下)非常糟糕并且可以轻松地做得更好,但是我没有能够做到这一点的逻辑知识。

这就是它正在做的事情......

  1. 从 UITableView 中的第一条消息中获取用户的“ID”。然后,它会根据存储的 ID(从上次加载时的第一个对象)检查此 ID,并将徽章编号设为 1。
  2. 然后检查消息中的第二个 ID 以查看它是否与存储的相同。如果不是,它将使徽章编号为 2。
  3. 等等等等..

我想要它做的是自动检查 ID 并将“1”添加到徽章编号,直到找到具有正确 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;
            }
        }

    }

【问题讨论】:

    标签: iphone objective-c xcode


    【解决方案1】:

    我不确定您要尝试什么,但查看您的代码,我认为您需要使用 for 循环。

    您的代码的第一行也是泄漏。我不确定您要做什么。据我所知,您不必在这里创建一个空字典。

    您检索 tweetValues (tweetValues = [tweets objectAtIndex:1];) 的行也很奇怪。您正在检索索引 1 处的对象。由于数组是 zero-indexed,因此您正在检索数组中的第二个对象。如果你想检索第一个你需要调用:[tweets objectAtIndex:0];

    如果我必须重构你的代码,我可能会这样做:

    [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
        }
    }
    

    我希望我正确地解释了您的代码。如果没有,更多的上下文可能会有用。

    【讨论】:

    • 嘿,您所显示的内容非常好,并且徽章编号已满,但是,我希望它仅将徽章编号增加到已保存的 ID 的值。因此,当视图加载时,它会将第一个 ID 添加到用户默认值。然后当它再次加载时,它会显示对象的数量(作为徽章编号),直到再次达到 ID。然后当它再次加载时,它会做同样的事情,将徽章编号显示为对象的数量,直到 ID 之前是 objectAtIndex:0 现在可能是 objectAtIndex:4,因此我希望徽章显示' 4' 在里面。
    【解决方案2】:

    我最终做了以下似乎有效的事情:

        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
            }
    
        }
    

    如果有人有更好的想法,请随时发布代码:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-10
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-18
      相关资源
      最近更新 更多