我可以将UILocalNotification数组写入磁盘吗?

时间:2010-07-02 23:31:08

标签: iphone

我正在尝试使用以下代码来保留当前的本地通知列表。 NSArray明确列出了它将使用的对象类型,这意味着我不能将它与充满UILocalNotification对象的数组一起使用。但是,UILocalNotifications确实实现了NSCoding,这使我相信必须有一种简单的方法来序列化/反序列化这个对象列表。我自己需要编码和文件持久性吗?另外,有没有办法获得有关写入失败原因的更多信息?

- (NSString*)getSavedNotifsPath {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    return [documentsDirectory stringByAppendingString:@"saved_notifs.plist"];
}

- (void)prepareToHide {
UIApplication* app = [UIApplication sharedApplication];
NSArray *existingNotifications = [app scheduledLocalNotifications];
if (! [existingNotifications writeToFile:[self getSavedNotifsPath] atomically:NO] ) {
    // alert
    [self showSomething:@"write failed"];
}
}

1 个答案:

答案 0 :(得分:2)

首先,更改代码

return [documentsDirectory stringByAppendingString:@"saved_notifs.plist"];

return [documentsDirectory stringByAppendingPathComponent:@"saved_notifs.plist"];

stringByAppendingPathComponent:将确保在文件名之前包含斜杠(/)(如果需要)。

NSArray只能保存UILocalNotification不属于的属性列表对象。相反,尝试使用NSKeyedArchiver。例如:

- (void)prepareToHide {
   UIApplication* app = [UIApplication sharedApplication];
   NSArray *existingNotifications = [app scheduledLocalNotifications];
   NSString *path = [self getSavedNotifsPath];
   BOOL success = [NSKeyedArchiver archiveRootObject:existingNotifications toFile:path];
   if (! success ) {
      // alert
      [self showSomething:@"write failed"];
   }
}

使用NSKeyedUnarchiver从保存的文件中检索数组。

注意:我实际上没有测试过这个,所以我不是100%确定它会起作用。但试试看看会发生什么。