1

たくさんのUIBezierPathsを保存することは可能ですか?もしそうなら、それはどのように行うことができますか?それらすべてをNSMutableArray(およびNSMutableDictionary)に入れてから、その配列/辞書をNSUserDefaultsに保存しようとしましたが、次の警告が表示されます。

*** -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '(
"<UIBezierPath: 0x20b9ca10>",
"<UIBezierPath: 0x20a1dbf0>",
"<UIBezierPath: 0x20b9e550>",
)' of class '__NSArrayM'.  Note that dictionaries and arrays in property lists must also contain only property values.
4

2 に答える 2

4

このコードを使用してみてください

-(void)saveData :(NSMutableArray *)dataArray;
{
    NSFileManager *filemgr;
    NSString *docsDir;
    NSArray *dirPaths;

    filemgr = [NSFileManager defaultManager];

    // Get the documents directory
    dirPaths = NSSearchPathForDirectoriesInDomains(
                                                   NSDocumentDirectory, NSUserDomainMask, YES);

    docsDir = [dirPaths objectAtIndex:0];

    // Build the path to the data file
    NSString *dataFilePath = [[NSString alloc] initWithString: [docsDir
                                                                stringByAppendingPathComponent: @"data.archive"]];

    [NSKeyedArchiver archiveRootObject:
     dataArray toFile:dataFilePath];
}

-(NSMutableArray *)loadData;
{
    NSFileManager *filemgr;
    NSString *docsDir;
    NSArray *dirPaths;

    filemgr = [NSFileManager defaultManager];

    // Get the documents directory
    dirPaths = NSSearchPathForDirectoriesInDomains(
                                                   NSDocumentDirectory, NSUserDomainMask, YES);

    docsDir = [dirPaths objectAtIndex:0];

    // Build the path to the data file
    NSString *dataFilePath = [[NSString alloc] initWithString: [docsDir
                                                                stringByAppendingPathComponent: @"data.archive"]];

    // Check if the file already exists
    if ([filemgr fileExistsAtPath: dataFilePath])
    {
        NSMutableArray *dataArray;

        dataArray = [NSKeyedUnarchiver
                     unarchiveObjectWithFile: dataFilePath];

        return dataArray;
    }
    return NULL;
}

正常に動作するはずです。この保存 BezierPath をテストしたところ、正常に動作するようです。電話機との間で配列と辞書の保存と読み込みを処理するアーカイブというクラスを作成します。

于 2012-10-31T14:50:06.370 に答える