2012-06-29 12 views
8

में काम नहीं कर रहा है मैंने क्लीवर का उपयोग करने की कोशिश की, जो कि मौजूदा आईओएस एप्लिकेशन के घटक के रूप में फोनगैप/कॉर्डोवा है। मैंने सफलता के बिना this step by step guide दो बार पीछा किया।क्लीवर (फ़ोनगैप/कॉर्डोवा घटक के रूप में) आईओएस

मेरा एप्लिकेशन आसानी से वेब दृश्य को तुरंत चालू कर सकता है, और मैं stringbyevaluatingjavascriptfromstring विधि का उपयोग कर सामग्री को पास कर सकता हूं, लेकिन जैसे ही मैं फोनगैप एपीआई (navigator.compass, navigator.network, ...) तक पहुंचने का प्रयास करता हूं, कुछ भी काम नहीं करता है। console.log(navigator) कॉर्डोवा ऑब्जेक्ट्स का कोई संकेत नहीं दिखाता है (console.log आउटपुट कुछ भी नहीं है एक्सकोड है, मैं http://debug.phonegap.com/ का उपयोग कर रहा हूं)। deviceready ईवेंट या तो ट्रिगर नहीं किया गया है।

मेरी एचटीएमएल फाइल में, मैं फोनगैप जेएस फ़ाइल cordova-1.7.0rc1.js शामिल करता हूं जिसे मैंने किसी अन्य प्रोजेक्ट से कॉपी किया है (जब से आप फोनगैप को घटक के रूप में उपयोग करते हैं तो /www फ़ोल्डर गायब है)।

मेरा ViewController.h आयात <Cordova/CDVViewController.h> आयात करता है। यहाँ मेरी ViewController.m

// 
// ViewController.m 
// CordovaComponent 
// 

#import "ViewController.h" 

@interface ViewController(){ 
    CDVViewController *cdvViewController ; 
} 
@end 

@implementation ViewController 

- (void)pushPhoneGap:(id)sender { 

    cdvViewController = [[CDVViewController alloc] init]; 
    cdvViewController.wwwFolderName = @"www"; 
    cdvViewController.startPage = @"index.html"; 
    cdvViewController.view.frame = self.view.bounds; 
    cdvViewController.webView.delegate = self; 
    [self.navigationController pushViewController:cdvViewController animated:YES]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    UIButton * button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [button setTitle:@"Push PhoneGap view" forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(pushPhoneGap:) forControlEvents:UIControlEventTouchUpInside]; 
    button.frame = CGRectMake(60, 50, 200., 50.); 
    [self.view addSubview:button]; 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} 

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    NSString *jsReturn = [cdvViewController.webView stringByEvaluatingJavaScriptFromString:@"setArray([1, 1, 2, 3, 5, 8, 13, 21, 34, 1]);"]; 
    NSLog(jsReturn); 
} 

@end 

आप क्या हो रहा है की एक विचार है? किसी भी तरह की सहायता का स्वागत किया जाएगा !

उत्तर

1

ठीक है, इस समस्या को हल करने के कई घंटों के बाद, मुझे अंत में पता चला कि क्या गलत हो रहा था।

cdvViewController.webView.delegate = self; 

तुम बस दृश्य नियंत्रकों के वेब देखने के प्रतिनिधि ओवरराइड नहीं कर सकते: यह पंक्ति है कि चीजों को गड़बड़ है। मूल प्रतिनिधि के पास तत्काल कोड है जो फोनगैप को चलाने में सक्षम बनाता है। इसे ओवरराइड न करें और सब ठीक हो जाएगा! ,

cdvViewController = [[CDVViewController alloc] init]; 
WrappingWebViewDelegate wrappingDelegate = [[WrappingWebViewDelegate alloc] init]; 
wrappingDelegate.wrappedDelegate = cdvViewController.webView.delegate; 
cdvViewController.webView.delegate = wrappingDelegate; 

मैं इस परीक्षण नहीं किया तुम इतनी:

@interface WrappingWebViewDelegate : NSObject <UIWebViewDelegate> 
    @property (nonatomic,retain) id<UIWebViewDelegate> wrappedDelegate; 
@end 


@implementation WrappingWebViewDelegate 
    - (void)webViewDidStartLoad:(UIWebView*)theWebView { 
     [self.wrappedDelegate webViewDidStartLoad: theWebView]; 
     // your code 
    } 

    // implement all other delegate methods and forward them to the wrapped delegate 
    [...] 
@end 

प्रयोग इस तरह:

+0

हाय, तो यदि यह पंक्ति नहीं जोड़ा गया है, तो WebViewDidFinishLoad फ़ंक्शन को निकाल दिया नहीं जा सकता है? – red23jordan

0

यदि आप चाहते हैं वेबव्यू घटनाओं के बारे में Cordova तोड़ने आप कुछ इस तरह की कोशिश कर सकते बिना सूचना पाने के लिए सावधान रहना चाहिए।

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