2014-05-23 8 views
9

kullanırken "Aygıtta kalan alan yok" özel durumunu yakalayamıyorum Bir dosyaya yazmak için NSFileHandle kullanıyorum. cihazım disk alanı dolu olduğundanNSFileHandle writedata işlevi

NSFilehandle *handle = [NSFileHandle fileHandleForWritingAtPath:@"path/of/file"]; 

@try { 
    [handle writedata:data]; 
} @catch (NSException *e) { 
    // when exception occur, never got here 
    NSLog(@"%@", e); 
} 

, çağıran writedata başarısız olur. Ama istisnaları yakalayamıyorum.

Programım günlük bilgi: Ben writedata öğrendim

2014-05-23 16:17:24.435 mytest[12919:3203] An uncaught exception was raised 
2014-05-23 16:17:24.435 mytest[12919:3203] *** -[NSConcreteFileHandle writeData:]: 
     No space left on device 
2014-05-23 16:17:24.436 mytest[12919:3203] (
0 CoreFoundation 0x00007fff8fae725c __exceptionPreprocess + 172 
1 libobjc.A.dylib 0x00007fff8cbb3e75 objc_exception_throw + 43 
2 CoreFoundation 0x00007fff8fae710c +[NSException raise:format:] + 204 
3 Foundation 0x00007fff93640f31 __34-[NSConcreteFileHandle writeData:]_block_invoke + 84 
4 Foundation 0x00007fff93840020 __49-[_NSDispatchData enumerateByteRangesUsingBlock:]_block_invoke + 32 
5 libdispatch.dylib 0x00007fff8bfc2fad _dispatch_client_callout3 + 9 
6 libdispatch.dylib 0x00007fff8bfc2f28 _dispatch_data_apply + 113 
7 libdispatch.dylib 0x00007fff8bfc9502 dispatch_data_apply + 31 
8 Foundation 0x00007fff9383fff9 -[_NSDispatchData enumerateByteRangesUsingBlock:] + 83 
9 Foundation 0x00007fff93640ed2 -[NSConcreteFileHandle writeData:] + 150 
10 ZiSyncMac 0x000000010000b1eb -[TransferFile writePart:data:] + 475 

dosya sistemine gerçek veri yazma yapmak için bir sevkini çağırır. Yani, writedata'un GCD'de bir istisna atacağını düşünüyorum.

Kodumdaki GCD istisnasını nasıl ele alabilirim?

+0

Buna bir çözüm buldunuz mu? – Icydog

cevap

0

Kontrol dışarı http://ioscake.com/how-to-properly-handle-nsfilehandle-exceptions-in-swift-2-0.html

seekToEndOfFile() ve writeData() atar olarak işaretlenmemiş (onlar do-deneyin-catch blok ile yakalanmış olabilir bir NSError nesneyi atmak yok) Swift'in şu anki durumunda olduğu anlamına gelen NSExceptions , "yakalandı".

Bir Swift proje üzerinde çalışıyorsanız, (bu söz konusu gibi) NSExceptions yakalar sizin NSFileHandle yöntemleri uygulayan bir Objective-C sınıf oluşturmak, ancak aksi takdirde şans bitti.