1

私のアプリケーションでは、単純なアラーム機能を実装したいと考えています。UILocalNotifications の使用方法は知っていますが、このソース コードには、iPhone のネイティブ時計アプリのアラーム領域の UI と同様の UI があり、一種のデータ永続性があると思われます。このソース コードには、インターフェイスの設計とデータの永続性が苦手な 2 つの点があります。しかし、私はそれをダウンロードして、いじり始めて、アラームが永続的ではないことを発見しました。

ダウンロード

ソースコードを永続化し、plist を保存して読み込めるようにソースコードを調整する方法を知っている人はいますか? 私も学ぶことにオープンです。この分野は私にとっても少し未知です。ありがとう

4

2 に答える 2

0

このコードを試してください... バンドルからドキュメントディレクトリに 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;
    }
于 2012-11-12T08:39:28.270 に答える
0

コードを確認したところ、「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];

ドキュメント ディレクトリ フォルダにあるファイルに対して保存操作を実行します。

于 2012-11-12T05:03:15.170 に答える