iOS - 删除我已删除的属性的引用

Posted

技术标签:

【中文标题】iOS - 删除我已删除的属性的引用【英文标题】:iOS - removing reference of a property I had deleted 【发布时间】:2014-02-09 03:26:48 【问题描述】:

我之前创建了一个按钮为IBAction,并将其命名为“hi”。我从 .h.m 文件中手动删除了代码,并从情节提要中删除了按钮,现在我收到以下错误:

2014-02-08 18:31:53.135 MadLibs2[7645:70b] * 由于应用程序终止 未捕获的异常“NSUnknownKeyException”,原因: '[setValue:forUndefinedKey:]: 这个类 不符合键 hi 的键值编码。'

如何删除“hi”引用?

//  JBViewController.h
//  MadLibs2

#import <UIKit/UIKit.h>

@interface JBViewController : UIViewController

// Properties manage an object's internal data
//// A properties data is stored in an instance variable or ivar (e.g., *sliderLabel)
// The property accesses ivars via getter/setter methods (aka accessors)
// put @property in front of the declaration of the ivar
// We access properties using the self keyword
@property (weak, nonatomic) IBOutlet UILabel *sliderLabel;
- (IBAction)sliderChanged:(id)sender;
- (IBAction)toggleShowHide:(id)sender;

@property (weak, nonatomic) IBOutlet UIView *settingsView;

@property (weak, nonatomic) IBOutlet UISwitch *endingSwitch;

@property (weak, nonatomic) IBOutlet UILabel *petsLabel;

@property (weak, nonatomic) IBOutlet UIStepper *petsStepper;

- (IBAction)stepperChanged:(id)sender;

- (IBAction)createStory:(id)sender;
@end

//  JBViewController.m
//  MadLibs2

#import "JBViewController.h"

@interface JBViewController ()

@end

@implementation JBViewController

- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.


- (void)didReceiveMemoryWarning

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


- (IBAction)sliderChanged:(id)sender 
    UISlider *slider = (UISlider *)sender;
    //why not NSInteger?
    int numberAsInt = (int) (slider.value + 0.5f);
    NSString *newText = [[NSString alloc] initWithFormat:@"%d", numberAsInt];
    //self is used to access properties
    /// What is 'text' used for? Is it a method?
    self.sliderLabel.text = newText;


- (IBAction)toggleShowHide:(id)sender 
    UISegmentedControl *segmentedControl =
    (UISegmentedControl *)sender;
    NSInteger segment = segmentedControl.selectedSegmentIndex;
    if (segment == 0)
        // self is used to access properties
        [self.settingsView setHidden:YES];
    else
        [self.settingsView setHidden:NO];


- (IBAction)stepperChanged:(id)sender 
    // update petsLabel to increase or decrease value
    UIStepper *stepper = (UIStepper *) sender;
    //NSLog([NSString stringWithFormat:@"%d",(int)stepper.value]);
    int stepperNum = (int)stepper.value;
    NSString *numPets = [[NSString alloc] initWithFormat:@"%d", stepperNum];
    self.petsLabel.text = numPets;


- (IBAction)createStory:(id)sender 

@end

【问题讨论】:

【参考方案1】:

仅当您从 .h 文件中删除 IBOutlet 而不是在情节提要中时,才会发生这种情况。

如果您在运行程序时仍然可以看到IBOutlet,则很可能您没有从情节提要中删除它。

也许您的某些IBOutlets 没有标题、文本或颜色,并且您认为您已删除它们,但它们(或其中一个,导致问题)仍然存在。

添加截图:

例如:

我这里有一个分段控件和一个按钮,它是不可见的,因为它没有标题、文本和背景颜色:

但按钮实际上仍然存在,当我通过将鼠标光标从左上角拖动到右下角来突出显示它时就证明了这一点:

如果我以为我删除了它(以及 .h 中的连接和操作)时不小心点击了它,我会收到错误消息。

【讨论】:

【参考方案2】:

您应该选择按钮并查看“连接检查器”,参考应该出现在那里。

【讨论】:

我无法选择该按钮,因为我已手动将其从情节提要中删除(例如,只需单击它并按下删除键)。 在我看来,你的错误在其他地方,一旦你从情节提要中删除(比如说)一个按钮,它应该从 .h 或 .m 文件中删除引用。您可以在这里发布您的 .h 和 .m 代码吗? 我进入连接检查器,然后开始点击不同的对象。我点击了我的步进器对象,在那里我发现它在引用插座中引用了“hi”。我点击了x,它解决了我的问题!谢谢,@lascort!【参考方案3】:

右键单击情节提要中的 UIButton - 您将看到当前设置的所有操作的列表。单击“hi”操作附近的小“x”并将其删除。

【讨论】:

我已手动从情节提要中删除了 UIButton(例如,只需单击它并按下删除键)。 您的情节提要中仍有一些将 IBAction 分配给“hi”的内容已不存在。检查故事板中可能有的任何其他按钮以查找并删除连接。 我进入连接检查器,然后开始点击不同的对象。我点击了我的步进器对象,在那里我发现它在引用插座中引用了“hi”。我点击了x,它解决了我的问题。谢谢,@tanzolone

以上是关于iOS - 删除我已删除的属性的引用的主要内容,如果未能解决你的问题,请参考以下文章

delete引用会怎么样

删除所有使用的引用

如何从SoapObject中删除属性?

delete在js里为引用删除

通过后台删除 hybris 中的动态属性

需要 XSLT 转换以删除重复元素 - 按属性排序