2015-06-27 10 views
23

खुलता है यह विचित्र है। कक्षा नाम विशेषता के लिए मेरे पास GridView के साथ एक साधारण स्टोरीबोर्ड प्लेसहोल्डर है।NSView के अंदर 'प्रिंट' को कॉल करना प्रिंट संवाद

class GridView: NSView { 

    required init?(coder: NSCoder) { 
     super.init(coder: coder) 
     print("coder: \(coder)") 
    } 

    override func drawRect(dirtyRect: NSRect) { 
     let rect = NSBezierPath(rect: dirtyRect) 
     NSColor.redColor().setFill() 
     rect.fill() 
    } 
} 

यह काम सिर्फ drawRect कार्यान्वित के साथ की उम्मीद के रूप में, लेकिन यह प्रिंट संवाद हर बार जब मैं अनुप्रयोग चलाने खोलने शुरू कर दिए जाने के बाद initialiser गयी।

Print dialog

इस क्यों होता है और कैसे मैं ठीक से एक कस्टम दृश्य के लिए स्टोरीबोर्ड initialiser reimplement कर सकते हैं?

+2

क्या आपने 'print' कथन को हटाने का प्रयास किया है? एक बहुत अजीब बग हो सकता है ... – luk2302

+0

ओह वाह! आप सही हैं, 'प्रिंट' यही कारण है कि यह कर रहा है ... यह वास्तव में दिमाग को चकमा देता है! –

+0

अच्छी तरह से, इसे ऐसा नहीं करना चाहिए, प्रिंट कुछ अलग करना चाहिए ...: डी – luk2302

उत्तर

21

कॉलिंग print() कुछ अलग करता है जैसा कि यह होना चाहिए - अधिक सटीक: आप अपेक्षा करते हैं कि कुछ अलग है। यह लॉगिंग प्रिंट के बजाय NSView's print(sender: AnyObject?) पर कॉल करता है। Swift.print(...) आमतौर पर अधिक उपयोग किए जाने के बाद से आप इसे एक बग या कम से कम अप्रत्याशित व्यवहार के रूप में मान सकते हैं।

यह क्रिया विधि प्रिंट पैनल खोलती है, और यदि उपयोगकर्ता रद्द करने के अलावा अन्य विकल्प चुनता है, तो रिसीवर और उसके सभी सबव्यू प्रिंट प्रिंट पैनल में निर्दिष्ट डिवाइस पर प्रिंट करता है।

this post in the apple dev forum पर एक नज़र डालें।

वास्तव में यह print पर कॉल करने के बाद से एक बग नहीं है जो वर्तमान संदर्भ में "करीब" है, निश्चित रूप से सही तरीका है। माता-पिता के print को कॉल करना कुछ मनमाने ढंग से अन्य print पर कॉल करने से कहीं अधिक उचित है। केवल तथ्य यह है कि आप आमतौर पर अन्य प्रिंट का उपयोग करते हैं, यहां भ्रमित बिंदु है क्योंकि सामान्य रूप से आप इस बात की चिंता नहीं करते कि लॉगिंग print स्थित है - यह बस काम करता है। आप दूसरी तरह के आसपास लगता है और अपने माता-पिता के मुद्रण print का उपयोग करना चाहते हैं तो यह एक बहुत होगा भ्रामक स्पष्ट रूप से यह है कि आप माता-पिता print और नहीं Swift.print(...) का उपयोग करना चाहते हो सकता है।

केवल "समाधान" संभवतः होने वाले दो कार्यों के लिए अलग-अलग नामों का उपयोग करना होगा।

+0

मजेदार बात यह है कि, आपके द्वारा लिंक किए गए पृष्ठ पर धागे में, लोग इसे निश्चित रूप से एक बग नहीं मानते हैं।':) –

+0

@ मॉर्गन विल्ड हाँ, यही कारण है कि मेरा जवाब विस्तारित हुआ - मैं" बग "शब्द को हटाना चाहूंगा, क्योंकि यह अजीब है लेकिन उस तरह से व्यवहार करने के लिए कुछ हद तक उचित है। – luk2302

+2

यह एक बग है। डीबग 'प्रिंट' कोको प्रिंटिंग विधि' प्रिंट 'की तुलना में बहुत अधिक उपयोग किया जाता है, इसलिए ढांचे को इसके बारे में कुछ करना चाहिए। यह सिर्फ खराब डिजाइन है। –

2

प्रिंट संवाद को कॉल करने का कारण यह है कि स्विफ्ट 2 में स्पष्ट रूप से एक ही हस्ताक्षर के साथ दो विधियां हैं।

enter image description here

0

यह एक बहुत पुराने धागा है, लेकिन मैं यहाँ जोड़ना होगा कि आप लिख सकते हैं:

Swift.print("something") 

और आप "लोग इन प्रिंट" समारोह के बजाय दृश्य की एक का उपयोग किया जाएगा।

संबंधित मुद्दे