在我的模型中声明一个数组以在控件中使用

时间:2012-02-22 20:24:50

标签: objective-c ios xcode4

我是Objective-C和MVC的新手。我一直在跟随Paul Haggerty的课程和讲座,并学到了很多东西。我正在进入我的编程阶段,我实际上能够坐下来编写工作应用程序,而不是仅仅阅读有关iOS开发的内容。

我很难理解如何正确使用MVC。

这是我编写的“非常基本”代码,并且已经“工作”了:

- (IBAction)buttonClicked {
    NSArray *namesArray = [NSArray arrayWithObjects:
                           (NSString *)@"Tiffany",
                           (NSString *)@"Jason",
                           (NSString *)@"Mustafa",
                           (NSString *)@"Mellisa",
                           (NSString *)@"Michael",
                           (NSString *)@"Kasim",
                           nil];

    if ([self.myDisplay.text
         isEqualToString:[namesArray objectAtIndex:0]]){
        self.myDisplay.text = [namesArray objectAtIndex:1];
    } else if ([self.myDisplay.text 
         isEqualToString:[namesArray objectAtIndex:1]]){
        self.myDisplay.text = [namesArray objectAtIndex:2];
    } else if ([self.myDisplay.text 
         isEqualToString:[namesArray objectAtIndex:2]]){
        self.myDisplay.text = [namesArray objectAtIndex:3];
    } else if ([self.myDisplay.text 
         isEqualToString:[namesArray objectAtIndex:3]]){
        self.myDisplay.text = [namesArray objectAtIndex:4]; 
    } else if ([self.myDisplay.text 
         isEqualToString:[namesArray objectAtIndex:4]]){
        self.myDisplay.text = [namesArray objectAtIndex:5];
    } else {
        self.myDisplay.text = [namesArray objectAtIndex:0];
    }

    self.numberOfLetters.text = [NSString stringWithFormat:@"%@ Letters", [NSString stringWithFormat:@"%d", self.myDisplay.text.length - 1]];
 }

如您所见,它设置了一个数组,然后当用户点击屏幕上的按钮时,它会显示下一个名称和该名称中的字母数。我想要做的是在我的模型中创建我的数组然后通过控制器访问它(这是你应该做的正确吗?)

我的方法是创建一个模型类(我称之为Brain)。我将大脑导入控制器并在大脑中创建了一个NSArray属性并合成它。但是我在控制器中访问它时遇到了困难。

此外,我知道我现在完成它的方式是错误的,因为我基本上每次用户点击按钮时都会重新创建数组。

有人可以指导我吗? (我正在使用ARC,顺便说一句。)

以下是我创建“大脑”课程的方法:

#import <Foundation/Foundation.h>

@interface Brain : NSObject
@property (nonatomic, strong) NSMutableArray *myNamesArray;

@end

#import "Brain.h"

@implementation Brain
@synthesize myNamesArray = _myNamesArray;

@end

1 个答案:

答案 0 :(得分:1)

我会跟踪索引。将其定义为类标题中的属性。此外,您可能不希望继续创建新阵列。

@property (nonatomic) int index;
@property (nonatomic, retain) NSArray *namesArray;

在您的实现中合成它:

@synthesize index, namesArray;

在init方法中创建数组(如果您愿意,可以使用viewDidLoad方法):

self.namesArray = [NSArray arrayWithObjects:
                       @"Tiffany",
                       @"Jason",
                       @"Mustafa",
                       @"Mellisa",
                       @"Michael",
                       @"Kasim",
                       nil];

如果您不使用ARC,请务必在dealloc方法中释放namesArray。

然后使用它来设置文本字符串。

- (IBAction)buttonClicked {
    self.index++;
    self.myDisplay.text = [self.namesArray objectAtIndex:index%[namesArray count]];
}