在我的应用程序中,我想实现一个简单的警报功能。我知道如何使用 UILocalNotifications,但我遇到了这个源代码,它具有与 iPhone 的本地时钟应用程序警报区域类似的 UI,并且它具有一种类型的数据持久性。这个源代码有两件事我不擅长界面设计和数据持久性。但是我下载了它并开始使用它,发现警报不是持久的。
有谁知道如何调整源代码以使其持久化并且可以保存和读取plist?我也乐于学习,这个领域对我来说也有些陌生。谢谢
尝试此代码...将 plist 从捆绑包保存到文档目录请注意,您将在第一次应用启动时出现“无法读取...”
- (NSMutableArray *)displayedObjects
{
if (_displayedObjects == nil)
{
NSString *path = [[self class] pathForDocumentWithName:@"Alarms.plist"];
NSArray *alarmDicts = [NSMutableArray arrayWithContentsOfFile:path];
if (alarmDicts == nil)
{
NSLog(@"Unable to read plist file: %@", path);
NSLog(@"copy Alarms.plist to: %@", path);
NSString *pathToSetingbundle = [[NSBundle mainBundle] pathForResource:@"Alarms" ofType:@"plist"];
[[NSFileManager defaultManager]copyItemAtPath:pathToSetingbundle toPath:path error:nil];
}
_displayedObjects = [[NSMutableArray alloc]
initWithCapacity:[alarmDicts count]];
for (NSDictionary *currDict in alarmDicts)
{
Alarm *alarm = [[Alarm alloc] initWithDictionary:currDict];
[_displayedObjects addObject:alarm];
NSLog(@"@disply obj %@", alarm);
}
}
return _displayedObjects;
}
我查看了您的代码并发现您没有将“Alarms.plist”文件表单资源移动到文档目录的问题。我们无法编辑资源文件夹中的文件。所以在应用程序委托文件中编写以下代码。
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *theFileName = @"Alarms.plist"; //Change this appropriately
NSString *oldPath = [[NSBundle mainBundle] pathForResource:@"Alarms" ofType:@"plist"];//[NSString stringWithFormat:@"%@/Inbox/%@", documentsDirectory, theFileName];
NSString *newPath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, theFileName];
if (![[NSFileManager defaultManager] fileExistsAtPath:newPath])
[[NSFileManager defaultManager] moveItemAtPath:oldPath toPath:newPath error:nil];
对 Document 目录文件夹中的文件执行保存操作。