-1

这真让我抓狂。我有一堂课:

@interface qanda : NSObject

@property (nonatomic, copy) NSString *quote;
@property (nonatomic, copy) NSString *author;

@end

是的,我确实在另一个文件中合成了它们。

然后在我的 Viewdidload 文件中声明了一些对象。

- (void)viewDidLoad
{
    qanda *qanda1 = [[qanda alloc] init];
    qanda1.quote = @"All our dreams can come true – if we have the courage to pursue          them. ";
    qanda1.author = @"Walt Disney";
}

我的 ViewDidLoad 文件有一个简短的摘录。

但是,当我尝试访问该对象的字符串时,我得到一个错误,我不知道为什么。

self.quote.text = qanda.quote;`

(顺便说一句,引用是一个出口)我得到的错误是:“使用未声明的标识符'qanda1';你的意思是'qanda'吗?

4

1 回答 1

1

从我在这里看到的情况来看,您qanda *qanda1仅限于viewDidLoad方法。一旦该方法返回,qanda1就不再存在。

在视图控制器的头文件中,为qanda1.

@class Qanda;    
@interface MyViewController : UIViewController
    .
    .
    .
@property Qanda *qanda1;
@end

在实现文件“MyViewController.m) 中:

#import "Qanda.h"

@implementation MyViewController
.
.
.
-(void)viewDidLoad {
    Qanda *qanda1 = [[Qanda alloc] init];
    qanda1.quote = @"All our dreams can come true – if we have the courage to pursue          them. ";
    qanda1.author = @"Walt Disney";
}

.
.
.
@end

这样,您可以在qanda1整个生命周期中访问MyViewController. 您现在可以在被调用self.quote.text = qanda1.quote;后的任何时间执行您的操作。viewDidLoad

我建议阅读变量范围(这里是 SO 的一个很好的起点),以便您完全了解这里发生的事情。

更新

正如对您的问题的评论中提到的,遵循一些基本的命名约定可能有助于区分实例变量和类名。(对于Objective C,但大多数语言都遵循相同的,如果不是相似的模式)。

按照通常的约定,您的“qanda”类将如下所示:

@interface Qanda : NSObject

@property (nonatomic, copy) NSString *quote;
@property (nonatomic, copy) NSString *author;

@end
于 2013-02-17T19:09:47.073 回答