数据持久性tableView问题iPhone(读取和写入plist)

时间:2012-11-12 03:58:22

标签: iphone ios core-data plist tableview

在我的应用程序中,我想实现一个简单的报警功能。我知道如何使用UILocalNotifications,但我遇到了这个源代码,其中包含iPhone的原生时钟应用程序警报区域的UI,以及它相信一种数据持久性。我不擅长这个源代码的界面设计和数据持久性两件事。但我下载了它并开始玩它以发现警报不是持久性的。

Download

是否有人知道如何调整源代码以使其具有持久性并且可以保存和读取plist?我也乐于学习,这个领域对我来说也有些不为人知。感谢

2 个答案:

答案 0 :(得分:0)

我查看了您的代码,发现您没有将“Alarms.plist”文件格式资源移动到文档目录的问题。我们无法编辑资源文件夹中的文件。所以在app delegate文件中写下以下代码。

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];

对文档目录文件夹中的文件执行保存操作。

答案 1 :(得分:0)

尝试此代码...将plist从bundle保存到Document Directory 请注意,您将在首次启动应用时看到“无法阅读...”

- (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;
    }