2012-06-24 1 views
3

앱이 UILocalNotification을 수신하지만 사용자가 화재 발생시 UITableViewController에있는 경우 예약 된 알림이 포함 된 표보기가 다시로드되지 않습니다. 사용자는 해당 뷰를 벗어나서 뷰가 다시로드되어 셀이로드되고 알림이 이미 실행되었으므로 해당 테이블 뷰의 셀에 표시되지 않습니다.실시간 리로드 표보기

문제 : 사용자가 방금 발생한 알림이 포함 된 특정 tableView 셀을 터치하면 앱이 다운되어 알림이 더 이상 존재하지 않게됩니다.

가능한 모든 장소에 - (void)reloadData을 구현했으며 실시간으로로드하지 않습니다.

더 나은 해결책은 무엇입니까?

기타 세부 정보, 알림이 표시된 후 (휴대 전화가 잠겨있을 때 사용자가 앱 아이콘을 슬라이드 한 후) 특정보기를 밀어 넣을 수있는 방법은 무엇입니까?

내 첫 번째 앱을 게시하는 데 남은 마지막 세부 사항이므로 도움을 주시면 감사하겠습니다.

+0

reloadData가 가능한 모든 장소에 구현되었다고 할 때, 그것이 무슨 뜻인지 확실하지 않습니다. 당신이 구현하고있는 TableViewController 서브 클래스의 내부에서 알림을 받아들이는 코드에서 원하는 것을 얻기 위해 [self.tableView reloadData]를 수행하면된다. 공유 할 수있는 코드가 있습니까? –

+0

충돌의 특성을 설명해 주시겠습니까? –

+0

몇 가지 코드를 볼 수 있습니까? – self

답변

1

설명하는 문제는 현재 로컬 알림 때문에 발생합니다. 알림이 처리되는 동안 여전히 예약 된 알림 목록에 있으므로 테이블보기를 새로 고치면 아무 효과가 없습니다. 이 문제에 대한 해결책은 알림을 처리 할 때까지 당신은 단지 한 번만 해고 통지를 (사용하는 경우, 테이블 뷰를 다시로드 또한 목록에서 알림을 삭제할 수

// In your app delegate 
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self.localNotificationsController reloadDataIfNeeded]; 
    }); 
} 

// In your controller that shows the local notifications 
- (void)reloadDataIfNeeded 
{ 
    if (![self isViewLoaded]) return; 

    [self.tableView reloadData]; 
} 

뭔가를 연기하는 것입니다 그래서) 알림 어쨌든 사라질 것이라고 확신 :

질문의 두 번째 부분에 관해서는
// In your app delegate 
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
{ 
    [application cancelLocalNotification:notification]; 
    [self.localNotificationsController reloadDataIfNeeded]; 
} 

("사용자가 응용 프로그램 아이콘을 슬라이드 할 때 알림 (표시된 후 나는 특정보기를 밀어 수있는 방법을 때 전화 잠긴 상태입니까? "), 로컬 알림을 통해 응용 프로그램을 활성화하는 두 가지 시나리오가 있습니다.

  1. 응용 프로그램이 일시 중지되었지만 여전히 메모리에 남아 있습니다. 그런 다음 앱이 전경를 입력하게됩니다 로컬 푸시 알림을 선택 -application:didReceiveLocalNotification:가 호출되고, [application applicationState]UIApplicationStateInactive
  2. 응용 프로그램이 아닌 메모리에 일시 중단되지 즉, 실행되지 않을 것입니다. 그럼 당신은 -application:didFinishLaunchingWithOptions:launchOptions의 로컬 알림을 받게됩니다 :

    UILocalNotification *localNotification = [launchOptions valueForKey:UIApplicationLaunchOptionsLocalNotificationKey]; 
    

    을 문서, -application:didReceiveLocalNotification:하지이 경우에 호출되는 말씀에도 불구하고.

애플리케이션을 깨운 알림을 표시하려면이 두 가지 경우에 컨트롤러를 밀어 넣을 수 있습니다.

+0

더 좋은 대답은 없습니다. 고맙습니다. –