更新:不幸的是,下面提供的幫助並未解決我在功能間共享類屬性的問題。其他人可以提出一個可能的問題嗎?以下是最新代碼:如何在Objective-C中的多個函數中獲取和設置類屬性?
頁眉.H:
@interface FirstViewController:UIViewController <UITableViewDataSource, UITableViewDelegate, UITabBarControllerDelegate> {
NSDictionary *sectorDictionary;
NSInteger sectorCount;
}
@property (nonatomic, retain) NSDictionary *sectorDictionary;
- (id)initWithData:(NSMutableDictionary*)inData;
實施.M:
@synthesize sectorDictionary;
- (id) testFunction:(NSDictionary*)dictionary {
NSLog(@"Count #1: %d", [dictionary count]);
return nil;
}
- (id)initWithData:(NSMutableDictionary *)inData {
self = [self init];
if (self) {
[self testFunction:inData];
// set the retained property
self.sectorDictionary = inData;
}
return self;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSLog(@"Count #2: %d", [self.sectorDictionaryCopy count]);
return [self.sectorDictionaryCopy count];
}
控制檯輸出:
2010-05-05 20:11:13.126 JSONApp[17378:207] Count #1: 9
2010-05-05 20:11:13.130 JSONApp[17378:207] Count #2: 0
跟進this question有關共享類別之間的對象現在我需要弄清楚如何在課堂上的各種功能中共享這個對象。
首先,設置:在我的App Delegate中,我從JSON將菜單信息加載到NSMutableDictionary中,並通過使用名爲initWithData的函數傳遞給視圖控制器。我需要使用這個字典來填充一個新的表視圖,它具有諸如numberOfRowsInSection和cellForRowAtIndexPath之類的方法。
我想使用字典計數來返回字典中的numberOfRowsInSection和info以填充每個單元格。不幸的是,我的代碼永遠不會超越init階段,字典是空的,所以numberOfRowsInSection總是返回零。
我想我可以創建一個類屬性,合成它,然後設置它。但它似乎並不想保留物業的價值。我在這裏做錯了什麼?
在標題.H:
@interface FirstViewController:UIViewController <UITableViewDataSource, UITableViewDelegate, UITabBarControllerDelegate> {
NSMutableDictionary *sectorDictionary;
NSInteger sectorCount;
}
@property (nonatomic, retain) NSMutableDictionary *sectorDictionary;
- (id)initWithData:(NSMutableDictionary*)data;
@end
在執行的.m:從NSLog的
@synthesize sectorDictionary;
- (id) testFunction:(NSMutableDictionary*)dictionary {
NSLog(@"Count #1: %d", [dictionary count]);
return nil;
}
- (id)initWithData:(NSMutableDictionary *)data {
if (!(self=[super init])) {
return nil;
}
[self testFunction:data];
// this is where I'd like to set a retained property
self.sectorDictionary = data;
return nil;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSLog(@"Count #2: %d", [self.sectorDictionary count]);
return [self.sectorDictionary count];
}
輸出:
2010-05-04 23:00:06.255 JSONApp[15890:207] Count #1: 9
2010-05-04 23:00:06.259 JSONApp[15890:207] Count #2: 0
這是一個遠射,但因爲它是一個可變的字典有機會別的東西正在改變它?如果你改變了'mutableCopy',會發生什麼? (即'sectorDictionary = [data mutableCopy];') – dreamlax 2010-05-05 06:36:04
initWithData中存在一個錯字:您應該返回self,而不是nil。我確信它在你的真實代碼中,因爲否則你永遠不會看到第二條日誌消息。 – JeremyP 2010-05-05 08:33:49
非常有幫助。將檢查這個,報告回來並標記爲答案,如果這是票。謝謝! – buley 2010-05-05 15:10:40