2

こんにちは、scheduleNotification メソッドで適切な種類の説明を取得する際に問題に直面しています。remediearray が範囲外になるため、sigbart を取得しています。

notify.alertbody にある scheduleNotification メソッドで間違った説明が表示されます。 cellforrow で正しい説明が表示されます

スケジュール通知メソッドで objectatindex を実行できないため、正しい説明を取得できません..

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

    if (cell==nil) {
        cell=[[PPtableCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
        cell.cellDelegate = self;
    }

    cell.notifyMe.on = NO;
    cell.remedyTextLabel.text=[[remedyArray objectAtIndex:indexPath.row]objectForKey:@"RemedyTxtDic"];

    return cell;
 }

    else {
        return nil;
    }

}

- (UILocalNotification *)scheduleNotification :(int)remedyID {

    [[UIApplication sharedApplication] cancelAllLocalNotifications];

    Class cls = NSClassFromString(@"UILocalNotification");
    if (cls != nil) {

        UILocalNotification *notif = [[cls alloc] init];

        notif.timeZone = [NSTimeZone defaultTimeZone];

        NSLog(@"%d",remedyID);

        NSString *descriptionBody=[[remedyArray objectAtIndex:remedyID]objectForKey:@"RemedyTxtDic"];

        NSLog(@"%@",descriptionBody);

        notif.alertBody = [NSString stringWithString:descriptionBody];
4

2 に答える 2

2
  • 小さなポイントですが-objectAtIndex:NSUIntegerではなくが必要intです。

  • インスタンスremedyArray変数(?)

-objectAtIndex:への引数が間違ったタイプであるという事実を除けば、あなたの問題はあなたが示しているメソッドにあるとは思いません. を呼び出しているコードを表示できますscheduleNotification:か?

もし私があなただったら、オブジェクトの配列インデックスを使用してオブジェクトを特定しません。競合状態や、通知がスケジュールされる頃に配列が変更される状況で問題が発生する可能性があります。代わりに、配列全体を線形検索するか、それが遅すぎる場合は、配列のハッシュ マップを保持する必要があります。

または、Remedy オブジェクトを NSManagedObject にすることで、すべてのテーブル処理とファインダー機能を無料で利用できます。

于 2013-01-24T17:14:41.613 に答える
1

こんにちは私はそれを解決することができました..これは私のコードです

- (UILocalNotification *)scheduleNotification :(int)remedyID
{
    [[UIApplication sharedApplication] cancelAllLocalNotifications];

    Class cls = NSClassFromString(@"UILocalNotification");
    if (cls != nil)
    {
        UILocalNotification *notif = [[cls alloc] init];
        notif.timeZone = [NSTimeZone defaultTimeZone];

        NSString *descriptionBody;

        for (int i=0; i<remedyArray.count; i++)
        {
            int arrayid = [[[remedyArray objectAtIndex:i]objectForKey:@"RemedyID"]intValue];
            if (arrayid == remedyID)
            {
                descriptionBody=[[remedyArray objectAtIndex:i]objectForKey:@"RemedyTxtDic"];
                break;
            }

        }

        NSDateComponents *components = [[NSDateComponents alloc] init];
        [components setDay:25];
        [components setMonth:1];
        [components setYear:2013];
        [components setMinute:45];
        [components setHour:11];

        NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
        NSDate *date = [gregorian dateFromComponents:components];


        notif.alertBody = [NSString stringWithString:descriptionBody];
        notif.alertAction = @"Show me";
        notif.soundName = UILocalNotificationDefaultSoundName;
        notif.applicationIconBadgeNumber = 1;

        notif.fireDate = date;

        NSDictionary *userDict = [NSDictionary dictionaryWithObject:notif.alertBody
                                                             forKey:@"kRemindMeNotificationDataKey"];
        notif.userInfo = userDict;

        [[UIApplication sharedApplication] scheduleLocalNotification:notif];

        return notif;
    }
    else
    {
        return nil;
    }

}
于 2013-01-25T06:32:42.897 に答える