我有一個帶有2個選項卡 - A和B的tabbar控制器。選項卡A是常規UIViewController,選項卡B是TableViewController。我試圖從後一個標籤一個NSNotification和接收相同,在選項卡B.在表中顯示的數據NS通知TableViewController不工作
我從選項卡下面張貼的通知:
//"itemAddedToCartDictionary" is the object that I am sending with notification
[[NSNotificationCenter defaultCenter] postNotificationName:@"ItemAddedToCart" object:nil userInfo:itemAddedToCartDictionary];
在我的標籤B(TableViewController),我試圖接收上述通知更新NSMutableArray屬性。該物業的聲明如下:
標籤乙 - h文件:
@property (nonatomic,strong) NSMutableArray *cart;
標籤乙 - .m文件:
//providing manual setter method for 'items' hence not using @synthesize
- (void)setCart:(NSMutableArray *)cart{
_cart = cart;
[self.tableView reloadData];
}
現在,我已經把代碼用於接收通知(在標籤B)在AwakeFromNib如下:
- (void)awakeFromNib{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addCurrentItemToCartFromNotification:) name:@"ItemAddedToCart" object:nil];
}
的代碼,調用方法 「addCurrentItemToCartFromNotification」 時收到通知的該更新我的財產:
- (void)addCurrentItemToCartFromNotification:(NSNotification *)notification{
NSDictionary *currentItem = [notification.userInfo objectForKey:@"CART_ITEM_INFORMATION"];
if (!self.cart){
NSLog(@"self.cart == nil");
self.cart = [[NSMutableArray alloc] init];
}else{
NSLog(@"self.cart != nil");
}
[self.cart addObject:currentItem];
}
現在,這是我面臨的問題:
我張貼在選項卡中的通知後,Tab鍵B(TableViewController)不顯示任何數據即使我已經通過上述方法更新了我的財產形式收到的通知。我的TableView的數據源方法如下:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.cart count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"itemInCart";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
NSDictionary *cartItem = [self.cart objectAtIndex:indexPath.row];
cell.textLabel.text = [cartItem objectForKey:@"ITEM_NAME"];
return cell;
}
所以基本上,我訪問我的TableViewController的性質(即我接受了,並從通知更新)從數據源的方法,它沒有返回數據。
您能否讓我知道我在這裏失去了什麼以及什麼。
謝謝, 邁克
編輯:繼從@Joel,@馬丁,響應@mkirci
添加重裝數據到我的 「addCurrentItemToCartFromNotification」(方法被稱爲在接到通知後)的幫助。我現在能夠看到從我的選項卡B(TableViewController)通知收到的項目。
現在,這裏是正在發生的事情:
只要接收到通知,NSMutableArray的屬性被返回零。因此,每次收到通知時,alloc init都會發生NSMutableArray屬性(位於addCurrentItemToCartFromNotification上) - (而不僅僅是第一次)。因此,不是使用從通知接收到的對象增加數組,而是每次創建數組,並且只添加當前通知的對象。
請問您能否對此情況進行一些解釋。感謝你的迴應。
謝謝, 邁克
EDIT2
更新代碼添加項目後,剪斷了initwithnibname的建議從@Joel
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
if (!self.cart){
NSLog(@"self.cart == nil");
self.cart = [[NSMutableArray alloc] init];
}else{
NSLog(@"self.cart != nil");
}
return self;
}
...或者使用'insertRowsAtIndexPaths',它給出一個更好的動畫。 –
@mkirci - 你的建議解決了我的問題。但是,我現在正面臨另一個問題,我作爲編輯提出了我的問題。希望你能看看它並分享你的意見。謝謝! –
@MikeG你發佈的代碼應該可以工作,也許你在別處指定了一個你不希望執行的值爲零的值? – mkirci