File PF mogok saat mengambil data dari cache

Baru-baru ini, setelah pembaruan Parse SDK, saya mulai mendapatkan pengecualian berikut ketika memuat file saat startup:

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
).

Adakah ide mengapa PFFile mogok? Apakah ini berarti cache lokal tidak kompatibel dengan versi sebelumnya dan saya akan mendapat masalah besar saat pengguna memperbarui aplikasi?


person frangulyan    schedule 08.11.2015    source sumber


Jawaban (1)


Masalahnya adalah saya membuat PFFile baru, menugaskannya ke kolom beberapa objek secara lokal dan tidak menyimpannya kembali ke Parse. Ketika file baru dibuat, properti url-nya adalah nil, yang seharusnya baik-baik saja, karena belum online. Setelah itu saya mengambil objek induk yang anaknya adalah file itu - ini akhirnya mengacaukan segalanya karena kemudian saya menutup aplikasi dan saat membuka berikutnya saya mencoba mengambil data PFFile itu dengan properti url sama dengan nil. Itu menghasilkan pengecualian di atas. Solusi yang disarankan oleh seorang pria dari Parse:

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

Setelah itu pengambilan objek akan membawa data yang benar dari server Parse.

person frangulyan    schedule 13.11.2015