PFFile หยุดทำงานเมื่อรับข้อมูลจากแคช

เมื่อเร็วๆ นี้ หลังจากอัปเดต Parse SDK ฉันเริ่มได้รับข้อยกเว้นต่อไปนี้เมื่อโหลดไฟล์เมื่อเริ่มต้นระบบ:

2015-11-08 13:23:15.088 MyApp[7219:471946] [Error]: Caught "NSInvalidArgumentException" with reason "*** -[_NSPlaceholderData initWithContentsOfFile:options:error:]: nil file argument":
(
0   CoreFoundation                      0x0000000110a07f45 __exceptionPreprocess + 165
1   libobjc.A.dylib                     0x000000011047edeb objc_exception_throw + 48
2   CoreFoundation                      0x0000000110a07e7d +[NSException raise:format:] + 205
3   Foundation                          0x000000011002cd48 -[NSData(NSData) initWithContentsOfFile:options:error:] + 95
4   Foundation                          0x00000001100c5fcc +[NSData(NSData) dataWithContentsOfFile:options:error:] + 61
5   MyApp                               0x000000010e828426 -[PFFile _cachedData] + 94
6   MyApp                               0x000000010e886cac __62-[BFTask continueWithExecutor:successBlock:cancellationToken:]_block_invoke + 83
7   MyApp                               0x000000010e88658c __55-[BFTask continueWithExecutor:block:cancellationToken:]_block_invoke_2 + 82
8   MyApp                               0x000000010e8874ab __29+[BFExecutor defaultExecutor]_block_invoke_2 + 358
9   MyApp                               0x000000010e887a15 -[BFExecutor execute:] + 65
10  MyApp                               0x000000010e886510 __55-[BFTask continueWithExecutor:block:cancellationToken:]_block_invoke + 138
11  MyApp                               0x000000010e886110 -[BFTask runContinuations] + 396
12  MyApp                               0x000000010e8859c6 -[BFTask trySetResult:] + 151
13  MyApp                               0x000000010e883c4c -[BFTaskCompletionSource trySetResult:] + 79
14  MyApp                               0x000000010e7e48b3 __28-[PFAsyncTaskQueue enqueue:]_block_invoke_2 + 198
15  MyApp                               0x000000010e88658c __55-[BFTask continueWithExecutor:block:cancellationToken:]_block_invoke_2 + 82
16  libdispatch.dylib                   0x00000001145fce5d _dispatch_call_block_and_release + 12
17  libdispatch.dylib                   0x000000011461d49b _dispatch_client_callout + 8
18  libdispatch.dylib                   0x0000000114605bef _dispatch_root_queue_drain + 1829
19  libdispatch.dylib                   0x00000001146054c5 _dispatch_worker_thread3 + 111
20  libsystem_pthread.dylib             0x000000011494ea9d _pthread_wqthread + 729
21  libsystem_pthread.dylib             0x000000011494c3dd start_wqthread + 13
).

มีความคิดเห็นใดบ้างที่ทำให้ PFFile หยุดทำงาน หมายความว่าแคชในเครื่องเข้ากันไม่ได้กับเวอร์ชันก่อนหน้า และฉันจะประสบปัญหาใหญ่เมื่อผู้ใช้อัปเดตแอปใช่หรือไม่


person frangulyan    schedule 08.11.2015    source แหล่งที่มา


คำตอบ (1)


ปัญหาคือฉันกำลังสร้าง PFFile ใหม่ โดยกำหนดให้คอลัมน์ของวัตถุบาง ในเครื่อง และไม่บันทึกกลับไปยัง Parse เมื่อไฟล์ใหม่ถูกสร้างขึ้น คุณสมบัติ url จะเป็น nil ซึ่งน่าจะใช้ได้ เนื่องจากยังไม่ได้ออนไลน์ หลังจากนั้นฉันก็ดึงออบเจ็กต์พาเรนต์ที่เป็นไฟล์ลูกนั้น - ในที่สุดมันก็ทำให้เรื่องยุ่งวุ่นวายเพราะจากนั้นฉันก็ปิดแอปและครั้งต่อไปที่เปิดขึ้นมาฉันพยายามดึงข้อมูลของ PFFile นั้นด้วยคุณสมบัติ url เท่ากับ nil ซึ่งส่งผลให้เกิดข้อยกเว้นข้างต้นนี้ วิธีแก้ปัญหาที่แนะนำโดยผู้ชายจาก Parse:

PFFile *file = object[fileKey];
if ((file != nil) && [file isKindOfClass:[PFFile class]] && (file.url == nil)) {
    [object revertObjectForKey:fileKey];
}

หลังจากนั้นการดึงวัตถุจะนำข้อมูลที่ถูกต้องจากเซิร์ฟเวอร์แยกวิเคราะห์

person frangulyan    schedule 13.11.2015