如何访问该对象

时间:2011-09-28 16:28:38

标签: objective-c ios

我想在循环中访问_news项。但不知道如何完成这项工作。

Hierarchy of my Game-News structure

我的Game.m看起来像

#import "Game.h"

@implementation Game

@synthesize homename = _homename;
@synthesize guestname = _guestname;
@synthesize date = _date;
@synthesize gametype = _gametype;
@synthesize news = _news;
@synthesize gameId = _gameId;

-(NSString*)description{
    return [NSString stringWithFormat:@"%@ gegen %@ (%@)", self.homename, self.guestname,     self.gametype];
}

@end

我的Game.h看起来像

#import <Foundation/Foundation.h>
#import <RestKit/RestKit.h>
#import "News.h"

@interface Game : NSObject {
NSString* _homename;
NSString* _guestname;
NSString* _date;
NSString* _gametype;
NSNumber* _gameId;
//    News* news;
@public
    NSArray* _news;  
}

@property (nonatomic, retain) NSString* homename;
@property (nonatomic, retain) NSString* guestname;
@property (nonatomic, retain) NSString* date;
@property (nonatomic, retain) NSString* gametype;
//@property (nonatomic, retain) News* news;
@property (nonatomic, retain) NSArray* news;
@property (nonatomic, retain) NSNumber* gameId;

@end

我的News.h看起来像

    #import <Foundation/Foundation.h>
    #import <RestKit/RestKit.h>
@interface News : NSObject {
    NSString* _minute;
NSString* _title;
    NSString* _bodytext;
    NSString* _player;
}

@property (nonatomic, retain) NSString* minute;
@property (nonatomic, retain) NSString* title;
@property (nonatomic, retain) NSString* bodytext;
@property (nonatomic, retain) NSString* player;


@end

我的news.m看起来像

#import "News.h"

@implementation News

@synthesize player = _player;
@synthesize title = _title;
@synthesize bodytext = _bodytext;
@synthesize minute = _minute;

@end

我想要访问变量的代码如下:

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects {
    NSLog(@"Loaded statuses: %@", objects);  
    HeaderText.text = [NSString stringWithFormat:@"%@", objects ];

//  for(News* n in _news) NSLog([n _bodytext]);
//    for (id object in objects) {        
//            NSLog(@"News = %@", object );
//   }
}

带有对象的NSLog看起来很适合游戏。接下来的事情是我想做一些事情(上面是比实际代码更多的伪代码,因为我不知道该怎么做):

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects {
NSLog(@"Loaded statuses: %@", objects);  
  HeaderText.text = [NSString stringWithFormat:@"%@", objects ];

  // loop all 
  for (id object in objects) {    
      news = objects.news;
      for (id mynews in news) {        
             NSLog(@"News minute = %@", news.minute );
             NSLog(@"News title = %@", news.title );
             NSLog(@"News bodytext = %@", news.bodytext );
             NSLog(@"News player = %@", news.player );

      }
  }
}

如何正确使用getter / setter方法(以便我可以在这里使用它)?

对于这个确实很愚蠢的问题感到抱歉,但我不明白这一点。

1 个答案:

答案 0 :(得分:1)

两件事:

第一,_news对象是一个私有变量,没有属性声明(例如getter和setter)? '_variableName'格式通常用于表示私有变量。

2,如果它不是私有变量,_news数组中的所有项都属于同一个类吗?

如果是这样,你可以做一个

for (NewsObject *theNewsObject in _news)
    { 
      //code here
    }

当您不知道数组中的对象类型或数组中包含的对象是否为不同类型时,for(id randomObject in array)非常有用。

现在,再次说明,NewsObject中的所有对象都应该是可以被其他类访问的公共属性(它们应该有getter和setter)。

希望这会有所帮助。 :)

编辑更新的问题

所以,如果我正确地得到你的问题,你就有了一个Game对象,里面有一个News对象数组。

所以,在你的Game.h中

NSString* _homename;
NSString* _guestname;
NSString* _date;
NSString* _gametype;
NSNumber* _gameId;
NSArray * _newsObjects; //declare it as NSMutableArray if you need to mutate it

现在,您声明属性的地方;

@property(nonatomic, retain)NSArray *newsObjects

像在Game.m文件中一样合成它

您正在使用@synthesize指令自动创建getter / setter。它为您创建了getter和setter。

同样,从您的代码中,它看起来像是通过方法传递的对象的NSArray

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects

由游戏对象组成。

因此,要从Game对象数组中访问News对象,请在执行此方法的类中导入News.h和Game.h,并执行以下操作:

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects {
    NSLog(@"Loaded statuses: %@", objects);  

    // loop all 
    for (Game *gameObject in objects) {    
      NSArray *newsObjectArray = [gameObject newsObjects] //or gameObject.newsObject
      for (News *mynews in newsObjectArray) {        
         NSLog(@"News minute = %@", mynews.minute );
         NSLog(@"News title = %@", mynews.title );
         NSLog(@"News bodytext = %@", mynews.bodytext );
         NSLog(@"News player = %@", mynews.player );

      }
    }
 }

我在您的代码中发现,正在执行的代码未在您发布的示例的任何部分中声明。 上面的代码将通过Game对象数组(称为objects)进行查看。 然后,对于该数组中的每个gameObject,它将遍历该newsObject的{​​{1}}数组。

希望这会有所帮助。 :)