我为我的ios应用程序创建了一个幻灯片抽屉。滑梯抽屉工作得很完美..。我在幻灯片抽屉里有几个按钮和一个文本框.问题是,每当我试图添加对幻灯片抽屉中的按钮/文本框的引用时,我就会得到NSUnknownKeyException.我不知道如何解决这个问题,因为我在IOs中很新.包括下面的代码..。
SlideDrawer.h
#import <UIKit/UIKit.h>
@interface SlideDrawer : UIViewController
@property (strong, nonatomic) IBOutlet UIButton *home;
- (IBAction)homeclick:(id)sender;
@endSlideDrawer.m
#import "SlideDrawer.h"
@interface SlideDrawer ()
@end
@implementation SlideDrawer
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)homeclick:(id)sender {
}
@endMainViewController.h
#import <UIKit/UIKit.h>
@interface mainViewController : UIViewController{
UIView *menuDrawer;
}
@property (readonly, nonatomic) UISwipeGestureRecognizer *recognizer_open, *recognizer_close;
@property (readonly, nonatomic) int menuDrawerX, menuDrawerWidth;
-(void) handleSwipes:(UIGestureRecognizer *) sender;
-(void) drawerAnimation;
@endMainViewController.m
#import "mainViewController.h"
@interface mainViewController ()
@end
@implementation mainViewController
@synthesize menuDrawerWidth, menuDrawerX,recognizer_open, recognizer_close;
- (void)viewDidLoad {
[super viewDidLoad];
menuDrawer = [[[NSBundle mainBundle] loadNibNamed:@"SlideDrawer" owner:self options:nil]objectAtIndex:0];
menuDrawer.backgroundColor= [UIColor colorWithRed:0.18 green:0.09 blue:0.29 alpha:1.0];
menuDrawerWidth= self.view.frame.size.width * 0.80;
int statusbarHeight= [UIApplication sharedApplication].statusBarFrame.size.height;
menuDrawerX= self.view.frame.origin.x- menuDrawerWidth;
menuDrawer.frame= CGRectMake(menuDrawerX, menuDrawer.frame.origin.y+statusbarHeight, menuDrawerWidth, self.view.frame.size.height-statusbarHeight);
// menuDrawer.backgroundColor=[UIColor colorWithRed:0.18 green:0.09 blue:0.29 alpha:1.0];
recognizer_close= [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipes:)];
recognizer_open= [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipes:)];
recognizer_close.direction= UISwipeGestureRecognizerDirectionLeft;
recognizer_open.direction= UISwipeGestureRecognizerDirectionRight;
[self.view addGestureRecognizer:recognizer_open];
[self.view addGestureRecognizer:recognizer_close];
[self.view addSubview:menuDrawer];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void) handleSwipes:(UIGestureRecognizer *) swipe{
[self drawerAnimation];
}
-(void) drawerAnimation{
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:-10];
CGFloat new_x = 0;
if(menuDrawer.frame.origin.x<self.view.frame.origin.x)
{
new_x= menuDrawer.frame.origin.x+menuDrawerWidth;
UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:menuDrawer.bounds];
menuDrawer.layer.masksToBounds = NO;
menuDrawer.layer.shadowColor = [UIColor blackColor].CGColor;
menuDrawer.layer.shadowOffset = CGSizeMake(0.0f, 1.0f);
menuDrawer.layer.shadowOpacity = 0.5f;
menuDrawer.layer.shadowPath = shadowPath.CGPath;
[self.view removeGestureRecognizer:recognizer_open];
[self.view addGestureRecognizer:recognizer_close];
}
else{
new_x= menuDrawer.frame.origin.x-menuDrawerWidth;
UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:menuDrawer.bounds];
menuDrawer.layer.masksToBounds = NO;
menuDrawer.layer.shadowColor = [UIColor blackColor].CGColor;
menuDrawer.layer.shadowOffset = CGSizeMake(0.0f, 1.0f);
menuDrawer.layer.shadowOpacity = 0.0f;
menuDrawer.layer.shadowPath = shadowPath.CGPath;
[self.view removeGestureRecognizer:recognizer_close];
[self.view addGestureRecognizer:recognizer_open];
}
menuDrawer.frame= CGRectMake(new_x, menuDrawer.frame.origin.y, menuDrawer.frame.size.width, menuDrawer.frame.size.height);
[UIView commitAnimations];
}
@end编辑
异常是main.m中的行。
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));异常
2015-06-10 14:07:17.357 Xpressions5939:1056267未知类ViewController在接口生成器文件中。2015-06-10 14:07:17.367 Xpressions5939:1056267 *终止应用程序由于未被指定的异常“NSUnknownKeyException”,原因:‘setValue:forUndefinedKey::这个类不符合键主的键值编码。’*第一次抛出调用堆栈:(0 CoreFoundation 0x0089e746 exceptionPreprocess + 182 1 libobjc.A.dylib ) 0x00527a97 objc_exception_throw +442 CoreFoundation 0x0089e361 -NSException raise + 17 3 Foundation 0x001a81ee -NSObject(NSKeyValueCoding) setValue:forUndefinedKey:+ 282 4 Foundation 0x00105608 _NSSetUsingKeyValueSetter + 115 5 Foundation 0x0010558d -NSObject(NSKeyValueCoding) setValue:forKey:+ 267 6 基金会0x0013b016 -NSObject(NSKeyValueCoding) setValue:forKeyPath:+ 386 7 UIKit 0x00fa8672 -UIRuntimeOutletConnection connect + 106 8 libobjc.A.dylib 0x0053d724 -NSObject performSelector:+ 62 9 CoreFoundation 0x007d647c -NSArray makeObjectsPerformSelector:+ 316 10 UIKit 0x00fa7133 -UINib实例化0x00fa7133:options:+ 1775 11 UIKit 0x00fa8fd2 -NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:+ 180 12 Xpressions 0x000418cf -mainViewController viewDidLoad + 175 13 UIKit 0x00dc1da4 -UIViewController loadViewIfRequired + 771 14 UIKit 0x00dc2095 -UIViewController视图+ 35 15 UIKit 0x00cb3e85 -UIWindow addRootViewControllerViewIfPossible + 66 16 UIKit 0x00cb434c -UIWindow _setHidden:forced:+ 287 17 UIKit 0x00cb4648 -UIWindow _orderFrontWithoutMakingKey + 49 18 UIKit 0x00cc29b6 -UIWindow makeKeyAndVisible + 80 19 Xpressions _handleDelegateCallbacksWithOptions:isSuspended:restoreState::+ 580 20 UIKit 0x00c56fd7 -UIApplication -AppDelegate + 287 21 UIKit 0x00c57dc1 -UIApplication _callInitializationDelegatesForMainScene:transitionContext:+ 2938 22 UIKit 0x00c5b422 -UIApplication _runWithMainScene:transitionContext:completion:+ 1639 23 UIKit0x00c7493e _84 -UIApplication _handleApplicationActivationWithScene:transitionContext:completion:_block_invoke + 59 24 UIKit 0x00c5a04a -UIApplication workspaceDidEndTransaction:+ 155 25 FrontBoardServices 0x03200c9e _37-FBSWorkspace clientEndTransaction:_block_invoke_2 + 71 26 FrontBoardServices __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK + 16 29 CoreFoundation 0x007b5963 __CFRunLoopDoBlocks + 195 30 CoreFoundation + 28 CoreFoundation 0x007c0050 _performDelegateCallOut:_block_invoke +16 29 CoreFoundation 0x007b5963__CFRunLoopDoBlocks+195 30 CoreFoundation 0x007b57bb __CFRunLoopRun + 2715 31 CoreFoundation 0x007b4a5b CFRunLoopRunSpecific + 443 32 CoreFoundation 0x007b488b CFRunLoopRunInMode + 123 33 UIKit 0x00c59a02 -UIApplication _run + 571 34 UIKit 0x00c5d106 UIApplicationMain + 1526 35 Xpressions 0x00043a0a主+13836 libdyld.dylib 0x02c2ac9 start +1) libc++abi.dylib:以NSException类型的完全例外终止
发布于 2015-06-10 10:18:33
这有两个可能的原因:
简单一点,您有连接,删除元素,但出口和代码之间的链接仍然存在,现在指向空。这个选项卡可以签入界面生成器右侧的最后一个选项卡。
另一个:您已经将您的出口连接到文件所有者,而不是连接到类。移除您的插座并将它们连接到类中。当您连接您的出口(从代码到元素,您将有空的圆圈),您将得到弹出的选择:文件所有者类。
编辑:
通过按x移除插座,然后再从代码中重新连接。当您移除这些出口时,您将在.h类中有空的圆圈,并再次连接到SlideDrawer。

发布于 2015-06-10 10:17:26
解决方案
STEP 1:Go XIB or if use STORYBOARD go STORYBOARD
STEP 2:Click View Controller
STEP 3:Again Give connection properly(Fill the circle)
STEP 4:Also check whether it is for button action or outlet property非常重要:右击文件的所有者(黄色),点击“连接检查器”(右上箭头),同时看到所有的插座。寻找!s,这表示缺少outlet.Remove。现在起作用了.
请看下面的参考资料
https://stackoverflow.com/questions/30751651
复制相似问题