【问题标题】:"Use of undeclared identifier"“使用未声明的标识符”
【发布时间】:2014-03-25 00:04:20
【问题描述】:

我对 Objective C 很陌生。不断收到此错误

"Use of undeclared identifier"

对于这行代码:

NSString *textOut1 = textOut.text;

显然我只是想拉出文本框文本。我在我的 h 文件中声明了以下内容

@property (weak, nonatomic) IBOutlet UITextField *textOut;

所以我不明白为什么我不断收到那个该死的错误。谢谢!

【问题讨论】:

    标签: ios objective-c properties nsstring uitextfield


    【解决方案1】:

    使用这个:

    NSString *textOut1 = _textOut.text;
    

    查看我在textOut前面添加的额外下划线

    阅读this苹果文档页面中标题为Most Properties Are Backed by Instance Variables的段落。

    【讨论】:

    • 这是真的,但如果有该属性,最好使用该属性。所以最好使用self.textOut.text。
    • @rmaddy:我同意你的看法。但实际上我关注的是问题“所以我不明白为什么我一直收到那个该死的错误”,并暗示他因为错过了一个下划线而出错了
    • 或者你可以说他收到错误是因为他忘记了self.。 :)
    【解决方案2】:

    要访问由变量someVariable 引用的对象的属性textOut,请编写someVariable.textOut。因此,要访问 self 对象的属性 textOut,请编写 self.textOut。您省略了所有者 — 在本例中为 self。

    【讨论】:

    • 谢谢 Chuck,我现在明白了很多,但是我现在收到“NSString *textOut1 = self.textOut.textLayout;”行的“使用未声明的标识符”错误
    • @Telexx: UITextField 有 textLayout 属性吗?我认为不会。
    • @Telexx:它说未声明的标识符是什么?
    • @Telexx:你能用该行的上下文(即它包含的方法)更新问题吗?
    【解决方案3】:

    self.textOut.text 是您所需要的。

    属性基本上类似于 Java 中的类变量,需要公共 getter 和 setter 才能使用。所以你不能直接在 .m 文件中使用它,而需要使用 getter 和 setter。 iOS 上的 Objective C 实际上为您提供了这些方法。因此,当您创建一个属性时,在后台,您拥有自己执行 getter 和 setter 的代码。

    您可以将值设置为:

    _textOut = BLAHBLAH
    

    得到它:

    [self textOut.text] 
    

    或
    self.textOut.text

    甚至_textOut.text(从技术上讲,这是textOut引用的局部变量)

    或者在你的情况下,

    `NSString *textOut1 = [self textOut.text];`
    

    或NSString *textOut1 = self.textOut.text;

    或NSString *textOut1 = _textOut.text; // 这可能是最不推荐的一个。

    尽管我相信斯坦福的班级说[self textOut] 总是更好。

    【讨论】:

      【解决方案4】:

      如果您不是 (@synthesize) 自己合成该属性,那么它将与名称开头有下划线的实例变量合成。

      试试:

      NSString *textOut1 = _textOut.text;
      

      【讨论】:

      • 这是真的,但如果有该属性,最好使用该属性。所以最好使用self.textOut.text。
      • 不,实例变量会有一个下划线。该属性不会加前缀。
      • 干杯。这就是我的意思
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-18
      相关资源
      最近更新 更多