所以我有这个 NSArray,里面有 NSDictionaries。
正如您在代码中看到的那样,实际上有两个非常相等的 for 循环(不要介意为什么)。
如果你看到日志,第二个循环中第一个对象中的关键 scheduleID 突然为零......
我不知道这怎么可能。对象(NSDictionary)本身不是零。我正在使用 ARC。
UILocalNotification *mergedNotification = [notificationsWithEqualFireDates objectAtIndex:0];
if ([notificationsWithEqualFireDates count] > 1) {
NSMutableArray *mergedUserInfo = [[NSMutableArray alloc] init];
for (UILocalNotification *ln in notificationsWithEqualFireDates) {
NSLog(@"Hmmm... %@", [ln.userInfo objectForKey:@"scheduleID"]);
[mergedUserInfo addObject:ln.userInfo];
}
NSDictionary *mergedUserInfoDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:mergedUserInfo,@"array", nil];
mergedNotification.userInfo = mergedUserInfoDictionary;
}
for (UILocalNotification *tempNotification in notificationsWithEqualFireDates) {
NSManagedObject *managedObject = [NSEntityDescription insertNewObjectForEntityForName:@"RegisteredNotifications" inManagedObjectContext:newMoc];
[managedObject setValue:tempNotification.fireDate forKey:@"fireDate"];
[managedObject setValue:[tempNotification.userInfo objectForKey:@"dateTimeOriginal"] forKey:@"dateTimeOriginal"];
[managedObject setValue:[tempNotification.userInfo objectForKey:@"scheduleID"] forKey:@"scheduleID"];
NSLog(@"Saving schedule: %@", [tempNotification.userInfo objectForKey:@"scheduleID"]);
}
更新 我能够通过使用复制方法来解决这个问题:
UILocalNotification *mergedNotification = [[notificationsWithEqualFireDates objectAtIndex:0] copy];
有人可以解释为什么会发生这种情况以及为什么我需要这种复制方法。我认为将 NSArray 中的对象分配给变量将是创建一个内存位置,对其进行初始化,然后将值从数组中的位置复制到变量...