首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用类将NSString传递给另一个ViewController

使用类将NSString传递给另一个ViewController
EN

Stack Overflow用户
提问于 2012-09-06 08:37:04
回答 2查看 932关注 0票数 0

我知道这非常简单,但我正在重新教自己基础知识,并试图弄清楚这一点:-)

我有一个名为MainVC的ViewController,还有一个名为ClassVC的

在ClassVC中,我有这样的代码:

代码语言:javascript
复制
@interface ClassVC : UIViewController
{
   NSString *mainLine;
}

@property (nonatomic, retain) NSString *mainLine;
@end

我在实现文件中有如下内容:

代码语言:javascript
复制
@synthesize mainLine = _mainLine;

-(NSString *)_mainLine
{
    _mainLine = @"This a string from a Class";
    return _mainLine;
}

现在我在想,如果我#将ClassVC导入到MainVC中,我也可以像这样传输该字符串:

代码语言:javascript
复制
 This code is in the viewDidLoad

    _mainLabel.text = _secondClass.mainLine;

    NSLog(@"%@", _secondClass.mainLine);

但这是不起作用的-所以我不能通过这种方式传递字符串吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-06 08:47:33

您的属性是mainLine,所以被覆盖的getter应该是-(NSString *)mainLine而不是-(NSString *)_mainLine。

代码语言:javascript
复制
-(NSString *)mainLine
{
    _mainLine = @"This a string from a Class";
    return _mainLine;
}

这对我很有效。在ClassVC中:

代码语言:javascript
复制
@interface ClassVC : UIViewController 

@property (nonatomic, retain) NSString *mainLine;

@end


#import "ClassVC.h"

@implementation ClassVC

-(NSString *)mainLine
{
    _mainLine = @"This a string from a Class";
    return _mainLine;
}

在ViewController中是这样的:

代码语言:javascript
复制
#import <UIKit/UIKit.h>
@class ClassVC;

@interface ViewController : UIViewController

@property (strong,nonatomic) ClassVC *secondClass;
@property (weak, nonatomic) IBOutlet UILabel *mainLabel;
@end

#import "ViewController.h"
#import "ClassVC.h"

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    ClassVC *secondClass = [[ClassVC alloc] init];
    self.mainLabel.text = secondClass.mainLine;
     NSLog(@"%@", secondClass.mainLine);
}
票数 1
EN

Stack Overflow用户

发布于 2012-09-06 08:52:34

这行代码:

代码语言:javascript
复制
@synthesize mainLine = _mainLine;

意味着分别创建名为mainLinesetMainLine:的getter和setter方法,这些方法包装一个名为_mainLine的实例变量。(它会为您创建实例变量,因此不需要在标题中声明的实例变量mainLine )

(=前面的名字是属性名,equals后面的名字是它包装的ivar的名字)

您已尝试覆盖getter,但使用了实例变量的名称。getter不以下划线开头,因此从返回字符串的方法中删除下划线。

因此,在您的viewDidLoad方法中,您调用的是mainLine方法,该方法只返回_mainLine实例变量。永远不会调用您的_mainLine方法

如果你只是返回一个常量字符串,那么你根本不需要这个属性和ivar。

(此外,您不应该以下划线开始方法名称或变量,因为根据约定,下划线表示它是私有的,并且Apple基本上保留了所有以下划线开头的方法名称。然而,ivars以下划线开头是很常见的)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12291533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档