ios - Xcode में संकलित करते समय तेज निकास कोड 1 के साथ विफल-संभवतः ब्रिजिंग हेडर से संबंधित




objective-c swift (16)

मेरे पास ओबजे-सी प्रोजेक्ट है I स्विफ्ट को माइग्रेट करने का प्रयास कर रहा हूं मैंने विभिन्न वर्गों के साथ सफलता हासिल की, लेकिन हाल ही में एक ऐसी घटना में भाग लिया, जो मुझे समझ में नहीं आता। जब मैं अपने मौजूदा कोड बेस को संकलित करने की कोशिश करता हूं तो मुझे निम्न (सुपर यूएनएफ़एफ़फ़ाइल त्रुटि संदेश) मिलता है

मेरी केवल धारणा किसी भी तरह से मेरे ब्रिजिंग हेडर से संबंधित है, लेकिन Xcode मुझे यह पता लगाने के लिए पर्याप्त जानकारी नहीं दे रहा है कि यह वास्तव में सही है।

मैं अपनी परियोजना के लिए CorePlot Cocoapods को जोड़ने के लिए CorePlot का उपयोग कर रहा हूं। मैं निम्नलिखित वर्ग को तेजी से माइग्रेट करने की कोशिश कर रहा हूं:

Obj-c कक्षा (ScatterPlotContainer.h)

#import <Foundation/Foundation.h>

@class CPTScatterPlot;

@interface ScatterPlotContainer : NSObject
@property (nonatomic, strong) CPTScatterPlot *ahrsAlt;
@property (nonatomic, strong) CPTScatterPlot *calibration;
@property (nonatomic, strong) CPTScatterPlot *coreAlt;
@property (nonatomic, strong) CPTScatterPlot *pitch;
@property (nonatomic, strong) CPTScatterPlot *roll;
@property (nonatomic, strong) CPTScatterPlot *slip;
@end

Obj-c कक्षा (ScatterPlotContainer.m)

#import <CorePlot/CPTScatterPlot.h>
#import "ScatterPlotContainer.h"


@implementation ScatterPlotContainer {

}
@end

स्विफ्ट कनवर्ज़न

import Foundation

 class ScatterPlotContainer : NSObject {
    public var ahrsAlt : CPTScatterPlot;
    public var calibration : CPTScatterPlot;
    public var coreAlt : CPTScatterPlot;
    public var pitch : CPTScatterPlot;
    public var roll : CPTScatterPlot;
    public var slip : CPTScatterPlot;
}

मेरी ब्रिजिंग हेडर फ़ाइल

#import <CorePlot/CPTScatterPlot.h>

मैंने इस प्रकार अब तक की कोशिश की है

जब मैं ब्रिजिंग हेडर फ़ाइल से #import <CorePlot/CPTScatterPlot.h> टिप्पणी #import <CorePlot/CPTScatterPlot.h> - मुझे एक त्रुटि मिलती है क्योंकि यह नहीं जानता कि क्या CPTScatterPlot है

मैंने #import <CPTScatterPlot.h> भी कोशिश की है, जो कि या तो काम नहीं कर रहा था।

विचार

इसलिए केवल एक चीज जिसे मैं सोच सकता हूं शायद शायद क्योंकि मैं कोको फॉड्स का उपयोग कर रहा हूं, कुछ प्रकार का मॉड्यूल नाम मुझे जोड़ना है। त्रुटि संदेश वास्तव में उपयोगी नहीं है क्या किसी ने मुझे कुछ ब्लरिंग त्रुटि के बारे में कोई सुझाव दिया है या यह पता लगाने के लिए कि क्या चल रहा है, एक और वर्णनात्मक त्रुटि संदेश कैसे प्राप्त करें?

धन्यवाद!


मेरे पास एक ही त्रुटि संदेश था किसने मदद की, स्विफ्ट कंपाइलर सेटिंग में ऑप्टिमाइज़ेशन स्तर को कोई भी नहीं सेट करना था यह वास्तव में मेरे लिए एक समाधान नहीं है और मुझे लगता है कि तेज संकलक में कई बगों में से एक है।


मैं इस कोड को didSet ब्लॉक में शामिल करने के लिए एक ही त्रुटि प्राप्त कर रहा था:

didSet {
  // Test whether this view is currently visible to the user.
  if super.isViewLoaded() && (super.view.window != nil) {
    // (build fails even if this block is empty)
  }
}

इसे नीचे शिकार करने के लिए कई परीक्षण / त्रुटि मिली super. हटाना आगे बढ़ने के लिए बिल्ड की अनुमति दी


मैं इस आखिरी रात में दौड़ता हूं और ऊपर से कुछ भी मेरी समस्या हल नहीं कर रहा था। मैं अपने लैपटॉप पर कुछ बहुत बुरा करने के बारे में था, जब मैंने देखा कि, शुद्ध शुभकामनाएं, कि एक (1) फाइल यूटीएफ -16 में पाठ एन्कोडिंग थी?!?! WTF ??

यह पिछली फाइल थी जिस पर मैं काम कर रहा था, और शायद, एक बुरा कट / पेस्ट "आयात" अखाड़ा में एक अजीब चरित्र। मैंने इस फाइल में मेरे कोड का एक कट / पेस्ट किया था जो कि एक बेअर हड्डी टेक्स्ट एडिटर में था। मैंने फाइल को हटा दिया, इसे फिर से विश्राम किया और मेरे कोड को वापस पेस्ट करें ... और वॉयला! यह चलेगा।

तो उपरोक्त करें, लेकिन अपनी फ़ाइल एन्कोडिंग भी देखें! :-)


1) फाइल को पहचानें, वहां समस्या है। आप कंसोल को संकलन निर्देश को कॉपी और पेस्ट कर सकते हैं और अंतिम स्क्रीन में त्रुटि विवरण शामिल होगा। वहां पीआईडी ​​नंबर को नोट करें, जहां समस्या की पहचान की गई थी। फिर ऊपर स्क्रॉल करें और पीआईडी ​​और संबंधित निर्देश ढूंढें- एक फाइल प्रति पीड होगी, इसलिए आपको उस फ़ाइल को मिलेगा जिसमें आपको समस्या है।

2) फ़ाइल के माध्यम से देखो और आप सभी पिछले परिवर्तनों की जांच करें। यदि आप git initialized है आप का उपयोग कर सकते हैं

git diff <file name>

@कंपल के लिए, मैं अब भी फ़ंक्शन कॉल में निर्दिष्ट करने के लिए कितना संघर्ष करना चाहता हूं। उदाहरण के लिए, एक UIColor वस्तु बनाने के लिए कभी-कभी UIColor निर्दिष्ट की आवश्यकता होती है, और कभी-कभी

ये दोनों कार्य:

playButton.backgroundColor = .darkGrayColor()
playButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)

यह कोई डीबगर चेतावनी के बिना संकलन पर exit code 1 त्रुटि उत्पन्न करता है। # समय-चूसने डीबग भंवर

playButton.setTitleColor(.whiteColor(), forState: UIControlState.Normal)  

इसलिए मेरे पास एक नया नियम है: जब किसी फ़ंक्शन का उपयोग करना जो एक से अधिक पैरामीटर लेता है, तो स्पष्ट हो।

अब swift: AVOID THE VORTEX से खेलने के लिए swift: AVOID THE VORTEX


चूंकि हर कोई उनकी दिखा रहा है, मैं अपना दिखाऊंगा:

class Foo : UIView {
    var pathPosition:Double = 0.0 { didSet {
        pathPosition = min(max(0.0, pathPosition), 1.0) // crashes if this line is present
        self.pathPosition = min(max(0.0, pathPosition), 1.0) // but not here
        }}
}

अविश्वसनीय रूप से, यह खेल का मैदान में नहीं आया है, लेकिन जब एक ढांचे में कोड में रखा जाता है तो विफल हो जाता है। यद्यपि यह कानूनी सिंटैक्स है (काम करने के लिए इस्तेमाल किया जाता है, फिर भी खेल के मैदान में काम करता है), स्विफ्ट कंपाइलर को पथपालन को self. साथ योग्य बनाना चाहते हैं self. । ध्यान दें कि (अपेक्षाकृत) पुराना कोड है और इसे संकलित करने के लिए प्रयोग किया जाता है, शायद कुछ 6.1 में तोड़ दिया।

संपादित करें:

मुझे लगता है कि मैं पागल हो रहा हूं, लेकिन ऐसा लगता है कि यहां पर एक बड़ी जटिलता समस्या है, जहां आसपास के कोड इस समस्या को प्रभावित कर सकते हैं। मैंने देखा कि चीजें कल रात संकलित हुईं, आज कुछ कोड और सेटिंग्स बदल दीं, और यह फिर से मुझ पर असफल रहा। आज, मुझे काम करने के लिए वास्तव में बेवकूफ कोड के एक गुच्छा में हैक करना पड़ा:

var pathPosition:Double = 0.0 { didSet {

    // bug: insane!! - have to clobber the value before resetting!
    let bugOldValue = pathPosition
    self.pathPosition = 1.0 // fails without this nonsensical line!
    self.pathPosition = min(max(0.0, bugOldValue), 1.0)
}}

इसके लायक होने के लिए, ऊपर दिए सहायक निर्देशों के अनुसार, मुझे मिली वास्तविक त्रुटि संदेश था:

PHI node has multiple entries for the same basic block with different incoming values!
%14 = phi double [ 1.000000e+00, %10 ], [ %11, %10 ], [ 1.000000e+00, %9 ], [ 0.000000e+00, %9 ], !dbg !4818
label %10
double 1.000000e+00
%11 = phi double [ %7, %entry ], !dbg !4815
LLVM ERROR: Broken function found, compilation aborted!

कल के लिए मुझे डर लगता है


मुझे यह एक ही त्रुटि थी, समस्या यह थी कि मैंने एक विधि को गैर-वैकल्पिक पैरामीटर के साथ ओवरराइड कर दिया था और ओवरराइड में पैरामीटर वैकल्पिक बना दिया था। (नीचे method पैरामीटर)

func logNetworkCallDurationForMethod(method:String, path:String, milliseconds: UInt) {

}

override func logNetworkCallDurationForMethod(method:String?, path:String, milliseconds: UInt) {

}

वास्तव में आज इस मुद्दे पर चला गया क्या हाल ही में एक परियोजना पर जीआईटी से एक पुल का नतीजा था जहां एक फाइल हटाई गई थी, लेकिन यह मेरी स्थानीय परियोजना में अद्यतन नहीं हुआ।

त्रुटि पर क्लिक करने से "लापता" फ़ाइल के स्थान को ऊपर लाया गया, चला गया और परियोजना नेविगेटर में इसका संदर्भ हटा दिया। त्रुटि को तय किया, एक स्वच्छ और सफलतापूर्वक संकलित किया


यह मेरे साथ हुआ और मुद्दा नेविगेटर में लॉग पढ़ने के बाद मुझे पता चला कि मेरे पास एक ही नाम के साथ दो तेज फ़ाइलें हैं I यह मुद्दा बना रहा था और मैं असफल रहा था निर्माण का निर्माण


मेरी परियोजना में लापता फाइल के कारण मुझे यह त्रुटि मिली इस फाइल को फिर से जोड़ा गया और वोला सब कुछ काम किया।


मेरे मामले में यह गलत तरीके से ओवरराइड किया गया था। आधार वर्ग:

open func send(_ onSuccess: @escaping ((SomeType) -> Void)) -> SomeType { }

उपवर्ग:

open override func send(_ onSuccess: ((SomeType) -> Void)) -> SomeType { }

जैसा कि आप देख रहे हैं @escaping की कमी है XCode8 में स्विफ्ट 3 कनवर्टर, विरासत के संबंध नहीं मानता, इसके अलावा, उस प्रकार की गलतियों को त्रुटियों के रूप में चिह्नित नहीं किया गया है


मेरे मामले में सिम्युलेटर बग बस सिम्युलेटर और साफ परियोजना से एप्लिकेशन की स्थापना रद्द करें तो परियोजना को चलाने के लिए


मुझे कोरडाटा ने दो बार फाइल बनाई (और खुद को जोड़ा)। फ़ाइलें डुप्लिकेट नहीं हैं की जाँच करें


बस व्युत्पन्न डेटा और सफाई हटाने से मुझे मदद मिली


NSString const *kGreenColor = @"#00C34E"; 

मैं अपने Constant.h फ़ाइल में पंक्ति से ऊपर था। जो पूर्वप्रक्रमकों के लिए ही था उस रेखा को निकालकर मेरे लिए काम किया


प्रोजेक्ट स्तर पर पुल फ़ाइल को स्थानांतरित करना मेरी समस्या को हल करता है





core-plot