مشكلة الكتابة إلى المعطر
-
13-09-2019 - |
سؤال
كل شيء يعمل بشكل جيد حتى أسمي saveFile
الطريقة (المبينة أدناه) لكتابة الملف مرة أخرى إلى القرص، حيث تعطل. ما الخطأ الذي افعله؟
هذا هو جزء من بلدي viewDidLoad
الطريقة التي افتح فيها الملف، الذي يعمل بشكل جيد.
//Get The Path
[self initPath];
dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath];
if (accountsArray == nil) {
accountsArray = [[[NSMutableArray alloc]init] autorelease];
}
if (countArray == nil) {
countArray = [[[NSMutableArray alloc]init] autorelease];
}
countArray = [dictionary objectForKey:@"count"];
accountsArray = [dictionary objectForKey:@"username"];
ثم قمت بتحميله في طاولة. ثم أضف بعض العناصر الجديدة إليها، والتي تعمل بشكل جيد. ثم اتصلت بهذه الطريقة لحفظها وتعطل:
-(void)saveFile {
[dictionary setObject:accountsArray forKey:@"username"];
[dictionary setObject:countArray forKey:@"count"];
[dictionary writeToFile:accountsFilePath atomically:YES];
}
المحلول
// ماذا لو لم يتم العثور على المسار، الملف غير تحميل وفي الدعارة قاموس هو nil
dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath];
// المرة الأولى التي تقوم فيها بإنشاء حسابات، Countarray
if (accountsArray == nil) {
accountsArray = [[[NSMutableArray alloc]init] autorelease]; }
if (countArray == nil) {
countArray = [[[NSMutableArray alloc]init] autorelease]; }
// مهلا لماذا قمت بتعيين RockAssaray إلى واحدة جديدة مرة أخرى، ماذا عن القديم الذي تابعه فقط؟
// إذا كان القاموس لا شيء، سيكون countarray nil أيضا
countArray = [dictionary objectForKey:@"count"];
accountsArray = [dictionary objectForKey:@"username"];
//// //// ////////////////////////////////////////////////////////////////
ما هي رسالة تحطم الطائرة الخاصة بك؟
ما هي حساباتك
هل تستطيع قراءة ملف قاموس؟
شيء واحد قد ترغب في معرفته
WritetoFile لن تقوم بإنشاء مجلد جديد لك
لذا فإن جميع المجلد في RociousFilepath أمر لا بد منه.
وإلا فقد ترغب في إنشاء هذا المجلد باستخدام NSFILEMANAGER
نصائح أخرى
أنت التلقائي countArray
و accountsArray
فقط بعد تهيئة لهم. قد يتم إصدارها بالفعل عند محاولة حفظها. حاول التعليق autorelease
لكلا منهم (وتذكر إطلاق سراحهم في مكان ما، ربما في dealloc
طريقة).
هل كل ما تبذلونه من المتغيرات في النطاق؟ أفترض أن الحسابات في القاموس ومتغيرات فئة؟ إن لم يكن قد يموتون في نهاية DiewDidLoad.
الشيء الآخر الذي قد يعضك هو قدرة قاموسك صغير جدا، أو أن iPhone لا يحبك باستخدام طريقة SetObject للكتابة فوق أزواج المفتاح / القيمة مثل هذا. ربما حاول استدعاء reviewObjectForkey: ثم قم بإضافته مرة أخرى كما لديك أعلاه؟
ربما قمت بالفعل بذلك، لكنني أود أن أفحص القاموس والمحطات في GDB أو باستخدام NSLOG مباشرة قبل WritetoFile: Atomically: Call.
قد ترغب أيضا في مشاركة رمز أكثر محاطا لإظهار ما يجري فيما يتعلق بهذا القاموس.
لقد كنت أستخدم NSZombie مع الكثير من النجاح لتصحيح الأعطال العشوائية أيضا.