嗨我在scheduleNotification方法中遇到一些正确的描述问题因为remedyarray超出界限而得到sigbart。如何在nsmutablearray中获取该特定索引的对象
我在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];
答案 0 :(得分:2)
小点,但-objectAtIndex:
需要NSUInteger
,而不是int
。
我假设remedyArray
是一个实例变量(?)
我不认为你的问题出现在你所展示的方法中,除了-objectAtIndex:
的参数是错误的类型它应该可以正常工作。你能展示调用scheduleNotification:
的代码吗?
如果我是你,我不会使用对象的数组索引来定位它,你可能会遇到竞争条件以及数组在通知计划周围发生变化的情况。相反,你应该在数组中进行线性搜索,或者如果它太慢,你应该保留它的哈希映射。
或者甚至更好,你的Remedy对象应该是一个NSManagedObject,然后你可以免费获得所有的表处理和查找器功能。
答案 1 :(得分: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;
}
}