我有一个类(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...
答案 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;
请记住,无论何时使用NSMutableArray
或NSArray
自定义对象,您只需要告诉编译器对象是什么类型。然后一切都会按预期运作。
以下是针对您的案例的示例,从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";
}