访问另一个NSMutableArray(I.E.嵌套对象访问)中的对象的NSMutableArray

时间:2012-01-04 04:06:22

标签: objective-c ios nsmutablearray nested nsarray

我有一个类(USER),它具有以下属性(NSString名称,NSString地址,NSMutableArray标记)。 tags属性是(TAG)的NSMutableArray - TAG是一个定义为(NSNumber tagId,NSString tagName)的类。

我尝试了几种不同的方法来访问tagName和tagId但是没有成功。

以下示例代码1:

Tag *tag = [[Tag alloc] init];
for(NSInteger n = 0; n < [thisSpotTag count]; n++)
{
    NSLog(@"%@", [thisSpotTag objectAtIndex:n]);
}

下面的示例代码2:

NSEnumerator *enumerator = [thisSpotTag objectEnumerator];
NSString *tname = nil;
while((tname = [enumerator nextObject]))
{
    NSLog(@"%@", tname);
}

在这两个示例中,我获取了标记的内存地址,但没有获取tagName和tagId的值。

如何访问此信息?

PS - 我正在使用带有ARC的xCode 4.2。


更新我的问题如下:

我回来了,并尝试了下面的一些建议修复但是我仍然无法从数组中获取数据。记住,我有一个对象数组,其中每个对象都包含一个对象数组。

我有这个代码,例如:

NSEnumerator *enumerator = [thisUser.tags objectEnumerator];
Tag *tagObj = [[Tag alloc] init];    
while(tagObj = [enumerator nextObject])
{
    NSLog(@"enumerated tag id:%@ name:%@", tagObj.tid, tagObj.name);
}

我从未在上面的代码中进入while循环...

thisUser.tag是USER对象部分的TAG对象。也许键入数组的外观将有助于解释嵌套。

NSMutableArray(               "this is an NSMutableArray of USER objects"
    element 0 =>  USER Object 1
        USER.name is an NSString
        USER.address is an NSString
        USER.tag              "this is an NSMutableArray of TAG objects"
            element 0 => TAG Object 1
                TAG.tagId is an NSNumber
                TAG.tagName is an NSString
            element 1 => TAG Object 2
               ...etc...
    element 1 => USER Object 2
        ...etc...

4 个答案:

答案 0 :(得分:1)

您正在获取类Tag的对象,您需要获取该对象并访问它的属性。

Tag *tag;
NSString *tname;
while((tag = [enumerator nextObject]))
{
    tname = tag.tagName
    NSLog(@"%@", tname);
}

此代码假设您已声明相应的@property

答案 1 :(得分:1)

尝试投射然后访问属性:

[(Tag *)[array objectAtIndex:i] tagId];
[(Tag *)[array objectAtIndex:i] tagName];

或者,对于快速枚举(更好),请执行

(Tag *)tag = [enumerator nextObject];
tag.tagId;
tag.tagName;

对于NSMutableArray User,您需要像这样投射:

User *user = (User *)[array objectAtIndex:i];
Tag *tag = (Tag *)[user.tags objectAtIndex:j];

现在您只需调用属性:

tag.tagId;
tag.tagName;

请记住,无论何时使用NSMutableArrayNSArray自定义对象,您只需要告诉编译器对象是什么类型。然后一切都会按预期运作。

以下是针对您的案例的示例,从NSMutableArray *usersArray的{​​{1}}开始:

User

答案 2 :(得分:1)

Tag *tag = [[Tag alloc] init];
for(NSInteger n = 0; n < [thisSpotTag count]; n++)
{
   tag = (Tag*)[thisSpotTag objectAtIndex:n]
    NSLog(@"Tagg Name:%@",tag.tagName);

}

答案 3 :(得分:1)

在Tag类中,tagID和tagName应定义为属性。所以在Tag的类头文件中:

@property (nonatomic, strong) NSNumber *tagID;
@property (nonatomic, strong) NSString *tagName;

并在实现中合成属性:

@synthesize tagID = _tagID;
@synthesize tageName = _tagName;

然后,只要有标记对象,就可以使用点表示法访问实例变量。例如:

Tag *exampleTag = [[Tag alloc] init];
exampleTag.tagName = @"Some name for your tag";

现在,如果您的对象存储在一个数组中,您可以使用快速枚举迭代数组并从每个标记读取或写入。例如,假设您在一个名为“arrayOfTags”的数组中有一个Tag对象数组:

for(Tag *tag in arrayOfTags) {
    tag.tagName = @"some string";
}