Iphone 将数据从数据存储中的可变数组传递到视图中的UILabel

Iphone 将数据从数据存储中的可变数组传递到视图中的UILabel,iphone,objective-c,xcode,ios5,Iphone,Objective C,Xcode,Ios5,我对iOS编程和整个编程都是新手,我对目前正在进行的一个项目有一个问题。我正在开发一个测验应用程序,我想将我的问题存储在一个包含问题数组的对象中。然后,My Quike ViewController导入题库,并在视图中的ui标签中显示这些问题 很抱歉,如果这是一个noob问题,但我似乎无法理解,网络搜索也没有太大帮助。我还处于学习过程的早期阶段 我有: ViewController.h ViewController.m 问题库.h 问题库 在问题库h中: //QuestionBank.h #i

我对iOS编程和整个编程都是新手,我对目前正在进行的一个项目有一个问题。我正在开发一个测验应用程序,我想将我的问题存储在一个包含问题数组的对象中。然后,My Quike ViewController导入题库,并在视图中的
ui标签中显示这些问题

很抱歉,如果这是一个noob问题,但我似乎无法理解,网络搜索也没有太大帮助。我还处于学习过程的早期阶段

我有: ViewController.h ViewController.m 问题库.h 问题库

在问题库h中:

//QuestionBank.h

#import <Foundation.h>

@interface QuestionBank : NSObject

- (id)initWithQuestionsArray:(NSMutableArray *)questions;
@property (nonatomic, copy) NSMutableArray *questions;
@property in currentQuestionIndex;
@property (nonatomic, copy) NSString *currentQuestion;
@end
在ViewController.h中

//ViewController.h
#import <UIKit/UIKit>
@class QuestionBank;

@interface ViewController : UIViewController <UINavigationController Delegate>

@property (weak, nonatomic) IBOutlet UILabel *questionLabel;
@property (retain, nonatomic) QuestionBank *questionBank;
对于代码,我在数组中遇到的问题不会出现在
UILabel
中(标签已正确连接到
ViewController


请随时指出任何错误,分享我如何使其工作的任何建议,以及我可以在我的代码中的任何其他地方进行的任何一般性改进。

您的代码有很多问题,需要大量修复。以下是其中一些:

我认为您并不完全理解在目标C中如何将变量传递给函数。例如,在您的-(void)setCurrentQuestion:(NSString*)q方法中,您实际上并没有做任何事情。例如,请允许我在一个模拟程序中演示以下代码:

- (void)testStringPassing:(NSString *)string
{
    string = @"Goodbye World!";
}

- (void)viewDidLoad
{
    NSString *string = @"Hello World.";
    [self testStringPassing:string];
    NSLog(@"%@", string);
}
在该示例代码中,您将记录“Hello World”,而不是“再见世界”。所以,本质上,-(void)testStringPassing:(NSString*)string实际上并没有做任何事情。如果要更改“string”的值,则需要执行以下操作:

- (NSString *)testStringPassing
{
    return @"Goodbye World";
}

- (void)viewDidLoad
{
    NSString *string = @"Hello World";
    string = [self testStringPassing];
    NSLog(@"%@", string);
}
- (void)viewDidLoad
{
    [super viewDidLoad]
    self.questionBank = [[QuestionBank alloc] init];

    //the rest of your code here
}
该代码将记录“再见世界”,因为您为testStringPassing返回一个值,并将“string”设置为等于该值

同样,这与您的代码有关,因为-(void)setCurrentQuestion(NSString*)q方法类似于第一个示例,您没有真正完成任何事情

在使用类之前,必须分配和初始化类。在ViewController中,您尝试在分配和初始化问题库类之前使用它。试着这样做:

- (NSString *)testStringPassing
{
    return @"Goodbye World";
}

- (void)viewDidLoad
{
    NSString *string = @"Hello World";
    string = [self testStringPassing];
    NSLog(@"%@", string);
}
- (void)viewDidLoad
{
    [super viewDidLoad]
    self.questionBank = [[QuestionBank alloc] init];

    //the rest of your code here
}
以上两个问题的组合是,您正在使用-(id)initWithQuestionsArray:(NSMutableArray*)问题作为自定义初始值设定项,但您没有对任何内容使用传递的值。在您当前的代码中,我建议将-(id)initWithQuestionsArray:(NSMutableArray*)问题代码替换为以下代码:

- (id)init
{
    self.questions = [[NSMutableArray alloc] init];
    [self.questions addObject:@"Your Question Text Goes Here!!!!"];
    [self.questions addObject:@"Another question can go here."];
}
在Objective C中,下划线命名约定有点不受欢迎,因为它破坏了合成属性并使用生成的getter和setter这一点。特别是因为你刚刚开始学习,我会放弃下划线符号。替换

@synthesize questions _questions;

然后,在访问问题数组的任何地方,使用self.questions而不是_questions


无论如何,这应该足以让你开始/指向正确的方向。我强烈建议你选择一本只关注Objective C的书。学习iOS非常好,但很多资源都认为你已经知道或熟悉Objective C,但事实似乎并非如此。

如果你刚开始学习iOS编程,我建议去iTunes U,从斯坦福大学学习iPhone/iPad编程课程,我相信老师的名字是Paul Hegarty。这完全是免费的,而且信息量很大。@Obrian先生谢谢你的建议,但我已经报名参加了整个夏天举办的“共同编码”课程,该课程是根据P.H.的讲座编写的,但我落后了很多,因为我要学习和参加一些考试。我也在努力阅读关于iOS编程的书。你在哪里初始化self。问题库?iTunes U最棒的地方是你可以下载讲座并以自己的速度观看。XCode在查找代码中的错误方面非常出色,如果您发布的代码是您的实际代码,那么当您尝试构建时XCode肯定在抱怨。@jere我想我对您问题的回答是我应该在哪里,以及如何初始化self.questionBank?我尝试过的方法导致了崩溃。我想在if语句中的viewDidLoad方法中对其进行初始化,以便应用程序最终能够根据用户选择的主题加载特定的问题库。您的建议有效。非常感谢你的耐心和帮助。我一直在阅读,但有时只有你自己去尝试,并从实际的人那里得到反馈,它才会凝聚在一起。显然有一些事情我误解了;我会接受你的建议,再看一遍。非常感谢。
@synthesize questions;