20 iphone model-view-controller objective-c nsarray
现在和XCode一起玩了大约2个星期,并且稍微阅读了MVC.我试图将模型连接到控制器时遇到问题,因为我发现很难理解数组.当我用Java编程时,我可以处理简单的数组但是我很安静地被NSArrays我看到的Obj-C吓倒了.
如果有人能够如此友善地向我展示一些对象的简单调用,那么我将永远感激不尽.
我的模特:
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
NSString *name;
NSNumber *age;
}
@property(nonatomic, retain) NSString *name;
@property(nonatomic, retain) NSNumber *age;
@end
Run Code Online (Sandbox Code Playgroud)
Person.m
#import "Person.h"
@implementation Person
@synthesize name;
@synthesize age;
@end
Run Code Online (Sandbox Code Playgroud)
在我尝试学习的过程中,我保持非常简单.
现在我的Controller类.我想要做的是创建一个包含40个"人物"对象的数组.但我不知道将其放入Obj C的代码中的正确方法.
或者Controller.h
#import <Foundation/Foundation.h>
@class Person;
@interface Controller : NSObject
{
Person *person;
}
@property(nonatomic, retain) Person *person;
-(void) doSomeWork;
@end
Run Code Online (Sandbox Code Playgroud)
Controller.m或者
#import "Controller.h"
#import "Person.h"
@implementation Controller
@synthesize person;
-(IBAction)doSomeWork
{
// I guess here is where i should create my array of 40 person objects
}
@end
Run Code Online (Sandbox Code Playgroud)
我的问题是如何声明大小为40的person对象数组.然后如何访问数组以读取和写入它.
提前感谢您阅读我的帖子.
har*_*rms 51
带有Cocoa/CocoaTouch的Objective-C中的数组与Java完全不同.三个主要区别是:
Obj-C数组只是与其他类似的类,并且在语言中没有内置支持.在Java中,数组通过[]运算符在语言中具有内置支持.
Obj-C数组是无类型的,它们接受任何继承的对象NSObject.这意味着您可以在同一个数组中混合类型,但这可能是不好的做法,除非您有充分的理由.(需要注意的是int,double,char,BOOL和其他内置类型不继承NSObject,所以你必须来包装他们NSNumber的对象,如果你曾经想阻止他们在数组中.)
除非整个数组是不可变的,否则Obj-C数组实际上没有固定长度的概念.因此,在创建阵列时无需确定长度.
要创建一个可变数组,即允许更改对象的数组(甚至添加和删除对象,更改数组的长度),您可以创建一个NSMutableArray:
myArray = [[NSMutableArray alloc] init];
// Could also use initWithCapacity: 40, but not necessary.
Run Code Online (Sandbox Code Playgroud)
要添加一个对象,例如你的实例,你Person可以调用该addObject:方法,在Person那里创建一个新的权限,或者给它一个指向现有的指针:
[myArray addObject: [[[Person alloc] init] autorelease]];
[myArray addObject: someOtherPerson];
// Last line adds some other person I already had a pointer to.
Run Code Online (Sandbox Code Playgroud)
要删除对象,可以使用removeObjectAtIndex:或removeLastObject.要替换,你打电话replaceObjectAtIndex:withObject:.要在数组中间插入一个对象(并记住,这也会增加数组的大小),您可以调用insertObject:atIndex:.
这涵盖了最重要的变异方法,即那些特定的变异方法NSMutableArray.当然,您还拥有仅观察数组的方法,并且这些方法在中定义NSArray.最重要的是count,给出当前数量的元素,并objectAtIndex:在您提供的索引处给出对象.
假设您Person的数组中有一些对象,您可以像这样迭代它们:
for (int i = 0; i < [myArray count]; i++) {
Person* p = [myArray objectAtIndex: i];
// Do something with p
}
Run Code Online (Sandbox Code Playgroud)
NSArray如果你不允许添加它,你可能想知道如何创建一个这样的东西.好吧,它的一个构造函数是initWithObjects:,它允许你编写一个逗号分隔的对象列表来添加(你需要以一个nil值结束).另一个是initWithArray:,它允许你传递另一个数组(可能是可变的),并且构造函数将在创建新数组时使用提供的数组中的对象.
enn*_*ler 29
下面是一个示例,它在Controller类中创建一个NSMutableArray实例变量,并在每次唤起doSomeWork时向该数组添加一个Person对象:
@interface Controller
NSMutableArray *personArray;
@end
@implementation Controller
- (void) viewDidLoad {
................
NSMutableArray *personsArray = [[NSMutableArray alloc] initWithCapacity:40];
}
- (IBAction)doSomeWork {
Person *myPerson = [[Person alloc] init];
myPerson.name = name;
myPerson.age = age;
[personsArray addObject:myPerson];
}
@end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
79345 次 |
| 最近记录: |