2011-08-28 105 views
-2

我是面向对象编程的新手,我有两个视图控制器。 a和b。在A中,我有一个名为gradeLabel的标签。我想打它,所以我可以显示视图控制器B.文本,所以我把这个:面向对象编程(HOW!)

-(NSString *)grade { 
    return [gradeLabel text]; 
} 

这是视图控制器B

#import "InfoInput.h" 
@implementation illRememberViewController 
    -(IBAction)previewTheInfo { 
     InfoInput *info = [[InfoInput alloc] init]; 
     gradeText.text = info.grade; 
    } 

,但该标签没有文本/显示无文本。我怎样才能解决这个问题。我是否正确使用面向对象的编程?

+0

您可能希望修改您的标题/文本,因为您的问题是Objective-C,而不是面向对象编程。 – johnluetke

+0

另外,“定位”不是一个字。 (我听说英国人试图在世界上强加它,但他们错了。) – Malvolio

回答

0

你有一个A类的对象吗?你需要以某种方式引用它。例如:

A* a = [[A alloc] init]; 
gradeText.text=a.grade; 

但它听起来像你的第一类是acutually视图控制器。在那种情况下,你根本不会在那里存储任何信息。你通常会引入一个叫做模型的thrid类,并且只是要求你给出评分。请阅读MVC模式。
[编辑] 我会把你的UIApplicationDelegeate中的一个属性中的成绩信息存储起来,并从那里读取 - 对你来说,这比你现在正在做的事更容易。 UIViewController不是普通的对象。通常情况下,一个对象表示一个特定的事物(比如TestResult类型的对象TestFForStudentA),可以这样使用。但是,UIViewController链接到它们控制的UI(因此它们的名称)并在使用UI时保持活动状态 - 但很难跟踪您何时切换视图等。

因此,我建议:
YourAppDelegate.h:

@property (retain) NSString* grade 

YourAppDelegate。L:

@synthesize grade; 

视图控制器A,一旦我们离开视图

- (void) viewWillDisapper { 
    YourAppDelegate* appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate]; 
    appDelegate.grade = gradeLabel.text; 
} 

保存级到应用程序委托的价值最后,您可以显示在视图控制器B中的等级:

-(IBAction)previewTheInfo { 
    YourAppDelegate* appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate]; 
    gradeText.text = appDelegate.grade; 
} 

请注意,这只是给你第一个想法。你真正想要的,什么是围绕创建一个存储级的对象,并携带该对象的视图控制器之间

+0

我做了它仍然不起作用 – user894725

+0

我的课都是视图控制器 – user894725

+0

我该如何解决这个问题 – user894725

3

首先,您需要了解面向对象的编程。

一旦你这样做了,那么答案就是“你需要实例化或获取封装了grade的类的现有实例并请求其为grade”。

而此行的代码将工作:

gradeText.text = thingThatHoldsTheGrade.grade; 

没有人小气;简洁,也许,但不是故意的意思。我们已经看到了这个问题 - 而且非常相似 - 很多次。最终归结为缺乏系统组装方式的知识,以及您的应用如何与系统提供的基础设施集成。

如果您试图建造一辆汽车,您的第一个问题是“我如何将电线连接到火花塞?”不会。这将是“汽车基本上是如何工作的,各个子系统是什么以及它们如何相互作用?”然后,“如果我想制作一辆定制汽车,我该如何修改'基本汽车'模板成为我想要的?”

Object Oriented Programming With Objective-C是好的,但不是一个真正的基本教程,像一个指南。

iOS Application Programming Guide也很好。

+0

是行不通由于某种原因,它不给标签是什么?你尝试任何文本 – user894725

+0

?编辑您的问题并发布更多代码。 – bbum

+0

我试过这个gradeText.text = b.grade; – user894725

1

当你做到这一点

InfoInput *info = [[InfoInput alloc] init]; 

你正在一个全新的实例,即不是同样的例子,你在gradeLabel上放置了一些文本。

假设你可能已经从ControllerA推下面的代码controllerB应该选择ControllerA的正确实例。

gradeText.text = [((InfoInput*)self.parentViewController) grade]; 

无需通过[InfoInput alloc] init]创建新实例,请删除此行。

+0

那么我该怎么做? – user894725

+2

你应该怎么做?学习面向对象的编程。 – bbum

+0

请帮助我,而不是傲慢 – user894725