-2

我有一个这样的对象:

@interface object : NSObject
{    
    NSString *_observation;    
    NSInteger _id;    
    NSString *_date;
    NSString *_device;  
    double _latitude;
    double _longitude; 
}

如您所见,它具有一些属性。然后我创建一个NSMutableArray充满了上面那个对象的对象,比如

array[object, object ,object, ....]

我想问的是如何将特定对象的特定属性处理到数组中?例如,如何将第一个对象 id 属性处理到 obj-c 中的数组中?

非常感谢!

4

4 回答 4

3

如果我正确理解了这个问题,那么一旦将对象的实例变量放在NSMutableArray.

如果问题那么简单,这就是您的解决方案:

NSInteger *currID = [array objectAtIndex:x].id;

此外,您可以使用快速枚举来遍历整个数组来访问每个元素的变量。

NSInteger *currID;
for (NSObject *currentObject in array) {
    currID = currentObject.id;
    //proccess ID
}

这假设您已经在 .h 文件中@property进行了id这样的设置:

@property (nonatomic) BOOL latitude;
@property (nonatomic) BOOL longitude;
@property (nonatomic, copy) NSString *observation;    
@property (nonatomic) NSInteger id;    
@property (nonatomic, copy) NSString *date;
@property (nonatomic, copy) NSString *device;

当然在 .m 中:

@synthesize latitude;
@synthesize longitude;
@synthesize observation;
@synthesize id;
@synthesize date;
@synthesize device;
于 2012-07-06T15:30:24.323 回答
0

NSArray文档是你的朋友。

无论如何,要访问对象数组,您可以- (id)objectAtIndex:(NSUInteger)index使用NSArray.

Seva Alekseyev所说的是,你的班级必须以不同的方式组织。例如:

//.h
@interface MyCustomObject : NSObject
{
    // you dont need to declare variables, the compiler will do it for you
}

@property (nonatomic, copy) NSString* objObservation;
@property (nonatomic, assign) NSInteger objId;
@property (nonatomic, copy) NSString* objDate;
@property (nonatomic, copy) NSString* objDevice;
@property (nonatomic, assign) double objLatitude;
@property (nonatomic, assign) double objLongitude;

@end

//.m
@implementation MyCustomObject

@synthesize objId;
@synthesize objDate;
@synthesize objDevice;
@synthesize objLatitude;
@synthesize objLongitude;
@synthesize objObservation;

- (void)dealloc
{
    /* uncomment if you don't use ARC
    [objDate release];
    [objDevice release];
    [objObservation release];

    [super dealloc];
     */
}

@end

像这样使用你的课程(你需要#import "MyCustomObject.h"

// populate your object
MyCustomObject* myObj = [[MyCustomObject alloc] init];
myObj.objDate = @"yourDate";
myObj.objDevice = @"yourDevice";
myObj.objId = 1;
myObj.objLatitude = 22.0;
myObj.objLongitude = 23.87;
myObj.objObservation = @"yourObservation";

// insert it into your array (here only for test purposes but you could create an instance variable for store it)
NSArray* myArray = [NSArray arrayWithObjects:myObj, nil];

// if you don't use ARC
[myObj release];

// grab the object from the array
MyCustomObject * currentObj = [myArray objectAtIndex:0];
// see its values, for example
NSLog(@"%@", [currentObj objDevice]);

现在我要添加一些注释。

  • 当您使用类时,使用大写字母(例如MyClass而不是)调用它们myclass,变量改为以小写字母开头,例如myVariable
  • 如果您的数组可以在不同时间填充,则需要一个NSMutableArray. ANSArray一经创建就无法更改。NSMutableArray相反是动态的,您可以向其中添加或删除对象
  • 当你处理对象时,你应该用属性包装你的变量(在这种情况下你不需要变量,因为编译器会为它们提供@synthesize指令)。这允许您不破坏对象封装
  • 如果你愿意,你可以考虑为你的对象提供一个初始化器

当你写问题时,试着在它周围加上一些背景,并试着解释你做了什么以及你想要实现什么。

于 2012-07-06T15:49:53.153 回答
0

为了访问数组中对象的成员,您需要获取指向该对象的指针。IE:

object *firstObject = [array objectAtIndex:0];
firstObject.id = 0;
object *secondObject = [array objectAtIndex:1;
...
于 2012-07-06T15:29:42.803 回答
0

任何一个

[[array objectAtIndex:0] id]

或者

[array objectAtIndex:0].id

假设数据成员周围的属性_id被调用id。这是一个属性 getter 调用,而不是直接的 ivar 访问。

NSArray不能也不能用它们的 a[i] 索引符号来模拟 C 数组。这不是 C++,其中 [] 运算符可以重新定义。在上面的行中,括号表示 ObjC 方法调用(AKA “消息传递”),而不是数组索引。

于 2012-07-06T15:47:19.187 回答