2 개의 탭이있는 탭바 컨트롤러가 있습니다. 탭 A는 일반 UIViewController이고 탭 B는 TableViewController입니다. 내 탭에서TableViewController에 대한 NSNotification이 작동하지 않습니다.
//"itemAddedToCartDictionary" is the object that I am sending with notification
[[NSNotificationCenter defaultCenter] postNotificationName:@"ItemAddedToCart" object:nil userInfo:itemAddedToCartDictionary];
: 나는 탭 a에서 NSNotification을 게시하고 같은를 받고
내가 아래 탭 A로부터 통지를 게시 탭 B. 테이블에서 데이터를 표시하는 것을 시도하고있다 B (TableViewController), NSMutableArray 속성 업데이트 위의 알림을 받으려고합니다. 속성은 다음과 같이 선언한다 :
탭 B - .H 파일 :
@property (nonatomic,strong) NSMutableArray *cart;
탭 B -하는 .m 파일 : 이제
//providing manual setter method for 'items' hence not using @synthesize
- (void)setCart:(NSMutableArray *)cart{
_cart = cart;
[self.tableView reloadData];
}
, 나는 통지를 수신하기위한 코드를 배치했다 로 awakeFromNib에서 (탭 B)에서 다음과 같이 :
- (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];
}
지금이 내가 직면하고있는 문제이다 : 나는 탭 A의 알림을 게시 한 후
을 탭 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;
}
그래서 기본적으로, 나는 (I 수신 및 알림에서 업데이트 오전) 데이터 소스 방법에서하고 데이터를 반환하지 않습니다 내 TableViewController의 속성에 액세스하고
.여기에서 내가 어디에서 무엇을 놓쳤는 지 알려주십시오.
덕분에, 마이크
편집 : @Joel, @martin에서 응답 다음은 도움 (방법은 통지를 수신 할 때 호출되는)
내 "addCurrentItemToCartFromNotification"을 다시로드 데이터를 추가 @mkirci. 이제는 Tab B (TableViewController)에서 알림을 수신 한 항목을 볼 수 있습니다.
지금 여기서 무슨 일이 일어나고 있는지의 : 알림이 수신 될 때마다
에서, NSMutableArray의 속성이 전무로 반환되고있다. 따라서 알림이 수신 될 때마다 alloc 초기화는 NSMutableArray 속성 (addCurrentItemToCartFromNotification에 있음)에 대해 발생합니다. - 단지 처음이 아닌). 따라서 알림에서받은 객체로 배열을 증가시키는 대신 배열은 매번 생성되고 현재 알림이 추가되는 객체 양식 만 만들어집니다.
제발이 상황에 대해 좀 알려주세요. 모든 응답을 감사하십시오.
감사합니다, 마이크
EDIT2
업데이트 된 코드는 항목을 추가 한 후 @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