iPhone SDK: проверка идентификационного номера для каждого объекта в UITableView и соответственно изменение номера значка - PullRequest
0 голосов
/ 14 мая 2009

Я пытаюсь использовать некоторый код для создания номера значка для иконки приложения iPhone.

Я могу успешно сделать это, однако код, который я использую (ниже), довольно плох и его легко можно сделать лучше, однако у меня нет логических знаний, чтобы это сделать.

Это то, что он делает ...

  1. Получить 'ID' пользователя из первого сообщения в UITableView. Затем он проверяет это по сохраненному идентификатору (из первого объекта, когда он был последний раз загружен) и создает значок номер 1.
  2. Затем проверяет второй идентификатор в сообщении, чтобы увидеть, совпадает ли он с сохраненным. Если нет, то это сделает значок № 2.
  3. и т. Д. И т. Д.

Я хочу, чтобы он автоматически проверял идентификаторы и добавлял «1» к номеру значка, пока не будет найдено первое сообщение с правильным идентификатором. Я не слишком уверен в кодировке.

Любая помощь будет отличной!

Спасибо

(код ниже:)

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

    }

Ответы [ 2 ]

0 голосов
/ 15 мая 2009

Я закончил тем, что сделал следующее, которое, кажется, работает:

    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
        }

    }

Если у кого-то есть идеи получше, пожалуйста, напишите код:)

0 голосов
/ 15 мая 2009

Я не совсем уверен, что вы пытаетесь сделать, но, глядя на ваш код, я думаю, вам нужно использовать цикл для .

Также первая строка вашего кода - утечка. Я не уверен, что вы пытаетесь сделать. Насколько я вижу, вам не нужно создавать пустой словарь здесь.

Строка, где вы получаете свои значения tweetValues ​​(tweetValues = [tweets objectAtIndex:1];), также странная. Вы извлекаете объект по индексу 1. Поскольку массивы с нулевым индексом , вы получаете второй объект в массиве. Если вы хотите получить первый, вам нужно позвонить: [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
    }
}

Надеюсь, я правильно интерпретировал ваш код. Если нет, то может пригодиться еще какой-то контекст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...