2014-06-12 2 views
5

मेरे पास मौजूदा नमूना उद्देश्य-सी ऐप है जो सेल्सफोर्स के एसडीके का उपयोग करता है। मैं इसे एक समय में स्विफ्ट वन-क्लास का उपयोग करने के लिए परिवर्तित करने की कोशिश कर रहा हूं। सेल्सफोर्स एसडीके में 'एसएफआरएस्टआरक्वेटएचएच' नामक एक कक्षा है जिसमें 'एसएफआरएस्ट डीलेगेट' प्रतिनिधि है।स्विफ्ट में उद्देश्य-सी में लिखे गए एक प्रतिनिधि विधि का उपयोग करने की कोशिश कर रहा है "प्रोटोकॉल घोषणा नहीं मिल सका"

उद्देश्य सी में, मेरे पास 'रूटव्यूकंट्रोलर एच' नामक एक वर्ग है जो UITableViewController का उप-वर्ग है। यह SFRestDelegate लागू करता है। यह बढ़िया काम करता है।

//RootViewController.h 
#import <UIKit/UIKit.h> 
#import "SFRestAPI.h" 

@interface RootViewController : UITableViewController <SFRestDelegate> { 

    NSMutableArray *dataRows; 
    IBOutlet UITableView *tableView;  

} 

मैं RootViewController ऑब्जेक्टिव-सी वर्ग बदलने के लिए एक RootVC.swift फ़ाइल बनाने के लिए कोशिश कर रहा हूँ।

मैं एक ब्रिजिंग हेडर फाइल है कि उन सभी हेडर कि ऑब्जेक्टिव-सी

//SwiftForce-Bridging-Header.h 
#import "SFRestAPI.h" 
#import "SFRestRequest.h" 

मेरे RooVC.Swift फ़ाइल की तरह दिखता है में आयात किया जाता है का आयात करता है:

import UIKit 

class RootVC: UITableViewController,SFRestDelegate { 
.. 
.. 
} 

अब, मैं कमान अगर + SFRestDelegate पर क्लिक करें, यह सही ढंग से प्रोटोकॉल कार्यान्वयन पर जाता है। हालांकि, अगर मैं बनाने की कोशिश, मैं .. "नहीं खोजा जा सका प्रोटोकॉल घोषणा SFRestDelegate त्रुटि

SWIFT_CLASS("_TtC10SwiftForce6RootVC") 
@interface RootVC : UITableViewController <SFRestDelegate> 
@property (nonatomic) NSArray * dataRows; 
- (instancetype)initWithStyle:(UITableViewStyle)style OBJC_DESIGNATED_INITIALIZER; 
- (void)viewDidLoad; 
- (void)didReceiveMemoryWarning; 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section; 
@end 

किसी भी मदद की सराहना आप से ऐप्लिकेशन डाउनलोड करके इसे परीक्षण कर सकते हैं:। https://github.com/rajaraodv/SwiftForce

+0

क्या MyTDelegate एक टाइपो है? – Dash

+0

नहीं। जब मैंने यह लिखा था तो यह सिर्फ एक टाइपो था। –

उत्तर

5

मैंने आपको आपके द्वारा लिंक किए गए रेपो को एक पुल अनुरोध भेजा है जो समस्या को हल करता है।

आपकी समस्या स्विफ्ट और ऑब्जेक्टिव-सी कक्षाओं के लोड ऑर्डर के साथ एक समस्या प्रतीत होती है और हेडर। आपको यह सुनिश्चित करना होगा कि स्विफ्ट कोड संकलित होने से पहले आपके स्विफ्ट वर्गों द्वारा आवश्यक किसी भी शीर्षलेख को संकलित किया गया हो। इसे सरल .h और .m उद्देश्य-सी फ़ाइलों के साथ काफी सहजता से संभाला जाता है, लेकिन स्थिर पुस्तकालयों (जैसे आपकी प्रोजेक्ट में) का उपयोग करते समय .pch फ़ाइल किसी भी शीर्षलेख को आयात करने के लिए सबसे उपयुक्त स्थान प्रतीत होती है जिसे आपके स्विफ्ट कोड को संकलित करने की आवश्यकता होती है पहर।

#import <SalesforceNativeSDK/SFRestRequest.h>

यह बहुत ही सुंदर प्रतीत नहीं होता है (बस ब्रिजिंग-हैडर समाधान की तरह) लेकिन केवल समय बताएगा कि यदि:

अपने SwiftForce-Prefix.pch फाइल करने के लिए इस लाइन को जोड़ने से काम करने के लिए लगता है यह एक बग या एक सर्वोत्तम अभ्यास है।

+0

बेकार प्लग, यदि यह उत्तर आपके लिए काम करता है: मेरे साथ साहस/वार्तालाप में शामिल हों और मेरे छात्रों के मुट्ठी भर में शामिल हों क्योंकि हम एक साथ तेजी से सीखते हैं: http://learnswift.io – johnnyclem

+0

समाधान के लिए धन्यवाद jonnyclem। यह मुझे ब्रिजिंग-हेडर में एक बग जैसा दिखता है क्योंकि ब्रिजिंग-हेडर उस चीज़ को करने के लिए माना जाता है जैसा कि मैं समझता हूं। कम से कम मुझे prefix.pch फ़ाइल में जोड़ने के बारे में कुछ भी नहीं मिला। एक बार फिर धन्यवाद! बीटीडब्ल्यू, आपका ब्लॉग वाकई अच्छा है! –

+0

धन्यवाद, यह मेरे लिए काम किया! किसी प्रोजेक्ट में उपसर्ग फ़ाइल के बिना मेरे जैसे किसी के लिए बस एक नोट: आप स्वयं को बना सकते हैं और इसे लक्षित सेटिंग्स में निर्दिष्ट कर सकते हैं, सेटिंग बना सकते हैं, 'उपसर्ग शीर्षलेख'। –

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