2010-07-21 34 views
7

Ứng dụng iPhone của tôi thỉnh thoảng gặp sự cố khi lần đầu tiên nó chạy sau khi được cài đặt. Sau này mỗi lần tôi thử và chạy ứng dụng nó vẫn còn trên màn hình giật gân hoặc thậm chí một màn hình màu đen cho đến khi cuối cùng nó chết. Tôi phải khởi động lại thiết bị để ứng dụng hoạt động. Sau này nó hoạt động tốt mọi lúc. Sự thay đổi duy nhất giữa mã OS3 và 4 là thuộc tính 'UIApplicationExitsOnSuspend' để buộc ứng dụng phải tải lại mỗi lần thay vì tạm dừng. Bất kỳ sự trợ giúp nào đều sẽ là tuyệt vời.Tai nạn ứng dụng iPhone (Chỉ dành cho iOS4)

Dưới đây là các đoạn hai Code:

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{ 
    taskListViewController = [[TaskListViewController alloc] initWithNibName:@"TaskListView" bundle:nil]; 
    taskListViewController.managedObjectContext = self.managedObjectContext; 

    [taskListViewController setAppDefaults]; 

    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:taskListViewController]; 
    [taskListViewController release]; 

    navController.navigationBar.tintColor = [UIColor blackColor]; 

    [window addSubview:[navController view]]; 
    [window makeKeyAndVisible]; 

}

Phương pháp
- (void)viewDidLoad 
{ 
    NSLog(@"viewDidLoad - Start"); 
    [super viewDidLoad]; 

    NSError *error = nil; 
    if(![[self fetchedResultsController] performFetch:&error]) 
    { 
    NSLog(@"Error with initial fetch %@, %@", error, [error userInfo]); 
    } 

    [activityIndicator startAnimating]; 

    self.navigationItem.leftBarButtonItem.enabled = NO; 
    self.navigationItem.rightBarButtonItem.enabled = NO; 
    infoButton.enabled = NO; 
    syncButton.enabled = NO; 

    taskListTable.userInteractionEnabled = NO; 
    taskListTable.allowsSelection = NO; 

    checkingRecovery = true; 
    [self insertCheck]; 
} 

khác được đề cập ở trên:

[taskListViewController setAppDefaults] 
    [self insertCheck]; 

setAppDefaults - liệt kê thông qua các thiết lập gói áp dụng defaultValues ​​để NSUserDefaults nếu họ chưa được thiết lập bởi người dùng trong các tạp chí.

insertCheck - Thực hiện một số truy vấn trên db để đảm bảo tính toàn vẹn tệp trên bản ghi âm nhưng trong trường hợp này vì đây là lần đầu tiên ứng dụng được tải, nó sẽ không làm gì cả.

Cập nhật:

tôi đã nhận xét ra các cuộc gọi phương pháp thêm (hai ở trên) và tôi vẫn gặp vấn đề.

Tôi đã tìm thấy một vài người có cùng một loại vấn đề trên diễn đàn nhà phát triển của Apple mà không có giải pháp. Một câu trả lời là từ một người dùng có cùng một vấn đề nhưng có ứng dụng đã được phê duyệt trên cửa hàng ứng dụng.

Cảm ơn Sj

+0

Bạn có thể chỉnh sửa bài đăng của mình để bao gồm mã cho những gì đang xảy ra trong phương thức 'applicationDidFinishLaunching' và' viewDidLoad' của bạn. Ngoài ra, hãy chắc chắn rằng bạn không có bất kỳ 'NSLogs' nào với các chuỗi định dạng dữ liệu sai (% d khi nó phải là% @ chẳng hạn), chúng có thể gây ra sự cố mà không có bất kỳ thông báo lỗi nào được hiển thị. – iwasrobbed

+0

Tải cửa sổ của bạn trông bình thường, tôi sẽ nói nếu nó không phải do người dùng mặc định của bạn, hãy bắt đầu gỡ lỗi theo cách của bạn thông qua mã kiểm tra cơ sở dữ liệu của bạn hoặc kết quả tìm nạp ban đầu. – iwasrobbed

Trả lời

0

Bạn đã xem tệp nhật ký chưa?

Bạn có thể sao chép chúng ra khỏi iPhone nếu bạn cắm nó vào, tải trình tổ chức (Windows-> Sắp xếp trong XCode) và chọn nhật ký thiết bị.

Nếu bạn thấy một khúc gỗ cho lần ứng dụng của bạn bị rơi, nó sẽ bao gồm các cuộc gọi stack (mà nên bao gồm các chức năng làm cho nó sụp đổ)

Ngoài ra nó có thể là bạn đang bị mắc kẹt trong một số mã chạy lúc khởi động - và nếu ứng dụng của bạn không khởi động trong một trang viên kịp thời (trong vòng 30 giây IIRC), iOS sẽ tiêu diệt nó.

+0

Dường như không có bất kỳ nhật ký sự cố nào liên quan đến ứng dụng. Cảm ơn. – Sjblack

+0

Một điều khác mà tôi đã nhận thấy là việc gỡ cài đặt ứng dụng và cài đặt lại ứng dụng mà không cần khởi động lại thiết bị sẽ không khắc phục được sự cố! Cảm ơn một lần nữa. – Sjblack

0

Hãy thử nó mà không có phần managedObjectContext và xem liệu bạn có còn gặp sự cố hay không. Nhật ký nói gì khi bạn gặp sự cố? Bạn có được một ngoại lệ bộ nhớ?

1

Nếu bạn đang gỡ lỗi ứng dụng khi gặp sự cố, bạn sẽ nhận được một dấu vết ngăn xếp, sẽ hiển thị cho bạn biết dòng ứng dụng gặp sự cố nào.

Nếu bạn có thể cung cấp dấu vết ngăn xếp, việc tìm nguyên nhân gây ra sự cố sẽ dễ dàng hơn nhiều.

+0

Tôi sợ khi nó bị treo nó đã không đạt đến điểm vào của ứng dụng trong mã vì vậy không nhận được bất kỳ bản ghi sự cố nào cả. Cảm ơn - Sj – Sjblack

Các vấn đề liên quan