这堂课不是关键价值?

时间:2013-04-29 07:50:14

标签: ios xcode uiwebview alert setvalue

我是使用XCode 4.2进行IOS编程的新手。 我已经有一个项目(我的第一个)具有不同的功能,包括UIWebView,它的工作原理! 直到..我试图在没有网络时添加警报。

XCode告诉我没有错误或问题。但是当我启动APP时,请转到WebView所在的视图:

·H:

#import "ViewController.h"

@interface ReservierungsformularBHV : UIViewController

{
    IBOutlet UIWebView *webview;
}

-(IBAction)refreshClicks:(id)sender;
@property (weak, nonatomic) IBOutlet UIWebView *webview;

@end

的.m:

#import "ReservierungsformularBHV.h"

@interface ReservierungsformularBHV ()


@end

@implementation ReservierungsformularBHV
@synthesize webview;

- (void)viewDidLoad {

    NSURL *url = [NSURL URLWithString:@"http://www.bodega-online.com/tischreservierung      /mail_formular.php?ort=Bremerhaven"];
    NSURLRequest *req = [NSURLRequest requestWithURL:url];
    [webview loadRequest:req];
    [super viewDidLoad];
}



-(void)awakeFromNIB{  //IGNORE
    [self refreshClicks:self]; //IGNORE
}
-(IBAction)refreshClicks:(id)sender{//IGNORE
     [webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.bodega-    online.com/tischreservierung/mail_formular.php?ort=Bremerhaven"]]];//IGNORE

     NSString *web = @"www.bodega-online.com/tischreservierung/mail_formular.php?ort=Bremerhaven";
     NSURL *url = [NSURL URLWithString:web];
     NSURLRequest *requestUrl = [NSURLRequest requestWithURL:url];
     [webview loadRequest:requestUrl];

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

}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
         return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
    } else {
        return YES;
    }
}

-(void)webView:(UIWebView *)webview didFailLoadWithError:(NSError *)error {
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                message:@"Please check your internet connection"
                                               delegate:self
                                      cancelButtonTitle:@"OK"
                                      otherButtonTitles:nil];
     [alert show];

}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
    // Custom initialization
    }
    return self;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

XCode暂停了模拟器并向我显示:

2013-04-29 09:39:18.164 Bodega [3139:c07] *由于未捕获的异常'NSUnknownKeyException'终止应用程序,原因:'[setValue:forUndefinedKey:]:此类不是键值编码 - 符合关键的储备规范BGV。 * 第一次抛出调用堆栈: (0x142c012 0x1251e7e 0x14b4fb1 0xcfde41 0xc7f5f8 0xc7f0e7 0xca9b58 0x3b3019 0x1265663 0x142745a 0x3b1b1c 0x2767e7 0x276dc8 0x276ff8 0x277232 0x282c25 0x4823a3 0x27fee3 0x280167 0x2801a7 0x5ec0a2 0x5ddb99 0x5ddc14 0x1265705 0x1992c0 0x3d5a64 0x1265705 0x1992c0 0x199258 0x25a021 0x25a57f 0x2596e8 0x1c8cef 0x1c8f02 0x1a6d4a 0x198698 0x2530df9 0x2530ad0 0x13a1bf5 0x13a1962 0x13d2bb6 0x13d1f44 0x13d1e1b 0x252f7e3 0x252f668 0x195ffc 0x1d72 0x1ca5) libc ++ abi.dylib:terminate调用抛出异常 (lldb)

我真的不知道该怎么做。 很久以前,请原谅我的英语。

是的,有人可以帮帮我吗? 我在这里找不到任何东西,以及我在项目中已经使用过的东西。我所做的一切,仍然来自教程。但我想学习它!

1 个答案:

答案 0 :(得分:0)

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                            message:@"Please check your internet connection"
                                           delegate:self
                                  cancelButtonTitle:@"OK"
                                  otherButtonTitles:nil];

您正在将委托设置为self,但您没有在ReservierungsformularBHV.h中定义UIAlertView协议

更改

@interface ReservierungsformularBHV : UIViewController

@interface ReservierungsformularBHV : UIViewController <UIAlertViewDelegate>

并在您的ReservierungsformularBHV.m中添加以下内容:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    NSLog("Dismissing alert");
}

以下是UIAlertView上的Apple文档链接:http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAlertViewDelegate_Protocol/UIAlertViewDelegate/UIAlertViewDelegate.html

编辑: 在.h文件中更改

@interface ReservierungsformularBHV : UIViewController

@interface ReservierungsformularBHV : UIViewController <UIAlertViewDelegate, UIWebViewDelegate>

并将您的viewDidLoad功能更改为以下内容:

- (void)viewDidLoad {
    webview.delegate=self;
    NSURL *url = [NSURL URLWithString:@"http://www.bodega-online.com/tischreservierung      /mail_formular.php?ort=Bremerhaven"];
    NSURLRequest *req = [NSURLRequest requestWithURL:url];
    [webview loadRequest:req];
    [super viewDidLoad];
}

让我解释一下这是做什么的:

webview有一些所谓的委托函数,它们在不同的情况下被调用。您的webViewDidFail - 函数从未被调用过,因为您的webview没有分配正确的委托,这是通过在.h文件中定义UIWebViewDelegate协议并在viewDidLoad中设置正确的委托来完成的。 {1}}。您也可以让其他类处理您的webview,但在这种情况下,您可以像上面解释的那样使用它。

无论如何,您应该使用Reachability框架检查活动的互联网连接,并在设备未连接时显示警报。有几个例子说明如何在网上做到这一点。