सबसे पहले, मैं आईओएस और स्विफ्ट के लिए नया हूं और एंड्रॉइड/जावा प्रोग्रामिंग की पृष्ठभूमि से आया हूं। तो मेरे लिए फ़ाइल में लिखने के प्रयास से अपवाद को पकड़ने का विचार दूसरी प्रकृति है, अंतरिक्ष की कमी, फ़ाइल अनुमति समस्याओं, या किसी भी फाइल के साथ संभवतः हो सकता है (और हुआ है, मेरे अनुभव में) । मैं यह भी समझता हूं कि स्विफ्ट में, एंड्रॉइड/जावा वाले अपवाद अलग-अलग हैं, इसलिए मैं यहां के बारे में नहीं पूछ रहा हूं।स्विफ्ट 2.0 में NSFileHandle अपवादों को सही ढंग से कैसे प्रबंधित करें?
मैं, इसलिए जैसे NSFileHandle का उपयोग कर एक फाइल करने के लिए संलग्न करने के लिए प्रयास कर रहा हूँ:
let fileHandle: NSFileHandle? = NSFileHandle(forUpdatingAtPath: filename)
if fileHandle == nil {
//print message showing failure
} else {
let fileString = "print me to file"
let data = fileString.dataUsingEncoding(NSUTF8StringEncoding)
fileHandle?.seekToEndOfFile()
fileHandle?.writeData(data!)
}
हालांकि
, दोनों seekToEndOfFile()
, और writeData()
कार्यों से संकेत मिलता है कि वे अपवाद किसी तरह फेंक:
यह यदि फ़ाइल डिस्क्रिप्टर बंद है या वैध नहीं है, तो विधि अपवाद उठाती है, अगर रिसीवर एक अनकनेक्टेड पाइप या सॉकेट एंडपॉइंट का प्रतिनिधित्व करता है, यदि फ़ाइल सिस्टम पर कोई खाली स्थान नहीं छोड़ा गया है, या यदि कोई अन्य लेखन त्रुटि होती है। -
writeData()
के लिए ऐप्पल दस्तावेज़ीकरण स्विफ्ट 2.0 में इसे संभालने का उचित तरीका क्या है? मैंने Error-Handling in Swift-Language, try-catch exceptions in Swift, NSFileHandle writeData: exception handling, Swift 2.0 exception handling, और How to catch an exception in Swift लिंक पढ़े हैं, लेकिन उनमें से कोई भी मेरे प्रश्न का सीधा जवाब नहीं है। मैंने स्विफ्ट कोड में ऑब्जेक्ट-सी का उपयोग करने के बारे में कुछ पढ़ा, लेकिन चूंकि मैं आईओएस के लिए नया हूं, मुझे नहीं पता कि यह विधि क्या है और इसे कहीं भी नहीं लग रहा है। मैंने नए स्विफ्ट 2.0 do-catch
ब्लॉकों की भी कोशिश की, लेकिन वे यह नहीं मानते कि NSFileHandle विधियों के लिए किसी भी प्रकार की त्रुटि डाली जा रही है, संभवतः फ़ंक्शन प्रलेखन में कोई फेंकने वाला कीवर्ड नहीं है।
मुझे पता है कि अगर मैं अंतरिक्ष से बाहर हो जाता हूं या जो भी हो, तो ऐप को क्रैश होने दे सकता है, लेकिन चूंकि ऐप को बाद में ऐप स्टोर में रिलीज़ किया जाएगा, मुझे वह नहीं चाहिए। तो मैं इसे स्विफ्ट 2.0 तरीके से कैसे करूं?
संपादित करें: यह वर्तमान में केवल स्विफ्ट कोड वाला एक प्रोजेक्ट है, हालांकि ऐसा लगता है कि उद्देश्य-सी में ऐसा करने का एक तरीका है, मुझे नहीं पता कि दोनों को कैसे मिश्रण किया जाए।
में संबंध है दुर्भाग्य से मैं इसे संकलित करने के लिए नहीं मिल सकता। एक्सकोड (संस्करण 7.2) मुझे त्रुटि 'अज्ञात प्रकार का नाम' NS_ASSUME_NONNULL_BEGIN 'और निश्चित रूप से मेल खाने वाली अंतिम घोषणा के लिए त्रुटि देता है। माना जाता है कि यह जो मैं पढ़ रहा हूं उससे एक्सकोड 6.4 में तय किया गया था, और चूंकि मैं किसी भी फली या कुछ भी नहीं उपयोग कर रहा हूं, मुझे नहीं पता कि मुझे यह त्रुटि क्यों है। कोई विचार? – mirage
बहुत अजीब, मैंने इस मुद्दे को नहीं देखा है। एक नया स्विफ्ट प्रोजेक्ट बनाने का प्रयास करें और वहां कोड का उपयोग करें। यदि वह काम करता है तो आपकी दो प्रोजेक्ट फ़ाइलों के बीच अंतर मिलता है। – Casey
'' 'NS_ASSUME_NONNULL_BEGIN''' – Casey