هل من الممكن تخزين كائنات متعددة باستخدام كائن archving?

StackOverflow https://stackoverflow.com/questions/2351954

سؤال

حسنا, بالطبع من الممكن أن أي قضية.في قانون بلدي لدي العديد من الأشياء التي أعمل معها ، وأنها بحاجة إلى أن تكون البيانات الثابتة.أن تفعل ذلك لقد استعملت كائن ترميز وتخزينها في ملف البيانات.مثل:

-(NSString *)dataFilePath
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    return [documentsDirectory stringByAppendingPathComponent:kFilename];
}

ثم كذلك على طول في قسم آخر من التعليمات البرمجية:

NSMutableData *data = [[NSMutableData alloc] init];
        NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
        NSLog(@"Test 4");
        [archiver encodeObject:playerTwo forKey:@"PlayerTwoObject"];
        [archiver encodeObject:singlePlayer forKey:@"SinglePlayer"];
        [archiver encodeObject:playerOne forKey:@"PlayerOneObject"];
        [archiver encodeObject:settings forKey:@"Settings"];


        [archiver finishEncoding];
        [data writeToFile:[self dataFilePath] atomically:YES];
        [singlePlayer release];
        [playerOne release];
        [playerTwo release];
        [settings release]; 

وأن يحفظ الكائنات.وأنا أعلم أنه يعمل لأنني يمكن أن تأخذ بها مع هذه التعليمة البرمجية:

unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:[[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]]];
    SettingsObject *settings = [unarchiver decodeObjectForKey:@"Settings"];
    Player *test = [unarchiver decodeObjectForKey:@"PlayerOneObject"];
    NSLog(@"Power On Settings Test: %d,%d", [settings playerOneStartingLife], [settings singlePlayerStartingLife]);
    NSLog(@"Power On Player Test: %@,%d", [test name], [test life]);

بارد!حتى الآن أنا يمكن تخزين الأشياء معهم. لذلك هذا هو المكان المسألة يأتي في. في فئة مختلفة لا تأخذ واحدة من الأشياء أنا تخزين والعمل معها.ليس كل منهم, أنا أقرأ فقط من أصل واحد.ثم حفظه مرة أخرى بعد تغيير الإعدادات.ولكن أنا فقط حفظ:

NSMutableData *data = [[NSMutableData alloc] init];
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    [archiver encodeObject:singlePlayer forKey:@"SinglePlayer"];
    [archiver finishEncoding];
    [data writeToFile:[self dataFilePath] atomically:YES];
    [singlePlayer release];

بعد أن كنت قد فعلت ذلك, كل ما تبقى من الكائنات يجب تخزينها يتم إزالتها.الآن أنا في حيرة لأنني أعتقد أنا فقط تحرير مفتاح واحد "المنفرد", لكن على ما يبدو أن بطريقة ما يزيل البقية ؟ هو أن من المفترض أن يحدث ؟ كان لدي بعض المشاكل مع الإفراج عن أرشيفي ، من شأنه أن يؤثر ذلك على الإطلاق...أنا لا أعتقد أنه سيكون.هل لدى أحدكم فكرة عن هذا لأنني لا أريد أن تأخذ جميع الكائنات من إعادة ترميز لهم إذا كنت تريد فقط تعديل واحد منهم...

شكرا على مساعدتكم!

هل كانت مفيدة؟

المحلول

يمكنك إنشاء جديد أرشيفي مع emtpy كائن البيانات.يمكنك كتابة المنفرد الكائن في البيانات لكنك لا تخزن بقية البيانات في نفس المنشأة حديثا الأرشيف.

للقيام بذلك, المقالة كاملة المخزنة سابقا الأرشيف ، ثم ضبط المنفرد موضوع الأرشيف وحفظه مرة أخرى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top