在Objective-C中设置另一个类的属性

时间:2012-07-16 17:21:09

标签: ios objective-c class properties

我在尝试设置将由另一个类设置的属性时遇到问题,这里有两个属性将用于填充表:

@interface TableViewController : UITableViewController
    @property (nonatomic, retain) NSArray *friendsNames;
    @property (nonatomic, retain) NSArray *friendsIDs;
@end

在这个类中(继承自NSObject)我使用这个方法设置它们:

@implementation MyFacebooDelegate

-(void)getFriends:(NSArray *)names {
    NSMutableArray *friendsNames = [[NSMutableArray alloc] init];
    NSMutableArray *friendsIDs = [[NSMutableArray alloc] init];
    for (int i=0; i<[names count]; i++) {
        NSDictionary *friend = [names objectAtIndex:i];
        NSString *name = [friend objectForKey:@"name"];
        [friendsIDs addObject:[friend objectForKey:@"id"]];
        [friendsNames addObject:name];
    }

    if(tableController == nil)
        tableController = [[TableViewController alloc] init];

    [tableController setFriendsIDs:friendsIDs];
    [tableController setFriendsNames:friendsNames];
    NSLog(@"%@", [tableController friendsNames]); 

    [friendsNames release];
    [friendsIDs release];
}

所有名称都在控制台(NSLog(@"%@", [tableController friendsNames]))上打印,但不在TableViewController类中打印。

如果我尝试在TableViewController类的viewDidLoad中打印两个数组的内容,那么它将为null,也会在表格出现在屏幕上之前设置数组。

2 个答案:

答案 0 :(得分:2)

你做错了......你应该将MyFaceboo delegate设置为UITableViewController的{​​{1}}数据源并实施tableView

答案 1 :(得分:1)

假设您使用friendNames&amp;的价值来自friendIds的{​​{1}} {会实现UITableViewController ..我在你的片段中没有看到它,所以提到它)

您可以重新编写属性(假设您使用的是ARC):

UITableViewDataSource

并使用以下语法:

@property (nonatomic, strong) NSArray *friendsNames;
@property (nonatomic, strong) NSArray *friendsIDs;

并确保您确实显示了您在此处创建的tableController.friendNames = friendNames; tableController.friendIDs = frinedIDs 而不显示其他内容(从您的代码段中不清楚您是如何展示/推动此tableController所以提及它)< / p>