UIWebView выбрасывает NSUnknownKeyException iPad - PullRequest
0 голосов
/ 31 января 2011

У меня есть приложение панели вкладок. Все работает нормально, и я могу нормально переключаться между вкладками и всем, кроме случаев, когда я переключаюсь на свою вторую вкладку ProductViewClass, представление не обновляется и выдает вывод консоли ниже. У меня нет ничего в этом представлении, кроме UIWebView и UILabel. Когда я удаляю UIWebView, он работает успешно, а когда я добавляю другой, он все еще работает. Он перестает работать, только когда я подключаю IBOutlet от владельца моего файла к UIWebView. Помимо синтеза и выпуска productWebView единственный не шаблонный код в ProductWebView.m это:

    NSString *urlString = @"http://www.google.com/";
    NSURL *theURL = [NSURL URLWithString:urlString];
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:theURL];
    [productWebView loadRequest:urlRequest];
    NSLog(@"Google loaded");

Весь ProductWebView.h выглядит следующим образом:

#import <UIKit/UIKit.h>
@interface ProductViewClass : UIViewController {

    IBOutlet UIWebView *productWebView;
}

@property(nonatomic, retain) UIWebView *productWebView;
@end

Вот вывод консоли:

This GDB was configured as "x86_64-apple-darwin".Attaching to process 52523.
2011-01-30 19:18:28.907 FairCom[52523:40b] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x4d06eb0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key productWebView.'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x00da8be9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x00efd5c2 objc_exception_throw + 47
    2   CoreFoundation                      0x00da8b21 -[NSException raise] + 17
    3   Foundation                          0x000296cf _NSSetUsingKeyValueSetter + 135
    4   Foundation                          0x0002963d -[NSObject(NSKeyValueCoding) setValue:forKey:] + 285
    5   UIKit                               0x004a88d6 -[UIRuntimeOutletConnection connect] + 112
    6   CoreFoundation                      0x00d1f2cf -[NSArray makeObjectsPerformSelector:] + 239
    7   UIKit                               0x004a72ed -[UINib instantiateWithOwner:options:] + 1041
    8   UIKit                               0x004a9081 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168
    9   UIKit                               0x00361a94 -[UIViewController _loadViewFromNibNamed:bundle:] + 70
    10  UIKit                               0x0035f709 -[UIViewController loadView] + 120
    11  UIKit                               0x0035f5e3 -[UIViewController view] + 56
    12  UIKit                               0x00372230 -[UITabBarController transitionFromViewController:toViewController:transition:shouldSetSelected:] + 120
    13  UIKit                               0x00370d86 -[UITabBarController transitionFromViewController:toViewController:] + 64
    14  UIKit                               0x00372b7e -[UITabBarController _setSelectedViewController:] + 263
    15  UIKit                               0x003729ed -[UITabBarController _tabBarItemClicked:] + 352
    16  UIKit                               0x002b1a6e -[UIApplication sendAction:to:from:forEvent:] + 119
    17  UIKit                               0x004af1f2 -[UITabBar _sendAction:withEvent:] + 422
    18  UIKit                               0x002b1a6e -[UIApplication sendAction:to:from:forEvent:] + 119
    19  UIKit                               0x003401b5 -[UIControl sendAction:to:forEvent:] + 67
    20  UIKit                               0x00342647 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527
    21  UIKit                               0x0034016c -[UIControl sendActionsForControlEvents:] + 49
    22  UIKit                               0x002b1a6e -[UIApplication sendAction:to:from:forEvent:] + 119
    23  UIKit                               0x003401b5 -[UIControl sendAction:to:forEvent:] + 67
    24  UIKit                               0x00342647 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527
    25  UIKit                               0x003411f4 -[UIControl touchesEnded:withEvent:] + 458
    26  UIKit                               0x002d60d1 -[UIWindow _sendTouchesForEvent:] + 567
    27  UIKit                               0x002b737a -[UIApplication sendEvent:] + 447
    28  UIKit                               0x002bc732 _UIApplicationHandleEvent + 7576
    29  GraphicsServices                    0x016dea36 PurpleEventCallback + 1550
    30  CoreFoundation                      0x00d8a064 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
    31  CoreFoundation                      0x00cea6f7 __CFRunLoopDoSource1 + 215
    32  CoreFoundation                      0x00ce7983 __CFRunLoopRun + 979
    33  CoreFoundation                      0x00ce7240 CFRunLoopRunSpecific + 208
    34  CoreFoundation                      0x00ce7161 CFRunLoopRunInMode + 97
    35  GraphicsServices                    0x016dd268 GSEventRunModal + 217
    36  GraphicsServices                    0x016dd32d GSEventRun + 115
    37  UIKit                               0x002c042e UIApplicationMain + 1160
    38  FairCom                             0x00001be0 main + 102
    39  FairCom                             0x00001b71 start + 53
    40  ???                                 0x00000001 0x0 + 1
)
terminate called after throwing an instance of 'NSException'
sharedlibrary apply-load-rules all
(gdb) 

Спасибо за вашу помощь!

1 Ответ

6 голосов
/ 31 января 2011

Вы загружаете перо.В этом кончике у вас есть розетка с именем productWebView, которая подключена, предположительно, к веб-представлению.Исключение, которое вы видите, говорит вам, что розетка productWebView на самом деле не существует.Вот где это становится странным.Ошибка говорит о том, что у объекта <UIViewController 0x4d06eb0> есть этот отсутствующий выход.Странный бит там, где он говорит UIViewController вместо имени фактического подкласса контроллера представления.Похоже, у вас есть перо, где Владелец файла настроен как один из ваших подклассов контроллера представления, но во время выполнения вы на самом деле просто используете экземпляр UIViewController напрямую.Вы должны убедиться, что все контроллеры представления, представляющие вкладки в контроллере панели вкладок, являются действительными правильными подклассами UIViewController, а не просто экземпляром UIViewController.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...