Сбой приложения iPad Причины перезагрузки памяти? - PullRequest
1 голос
/ 20 мая 2011

У меня на iPad есть приложение, которое вылетает, вызывая перезагрузку. Этот сбой происходит где-то после метода showMap: (Mappe * mappa):

- (void)viewDidLoad {
    moc = [[MapFetcher sharedInstance] managedObjectContext];
    [NSThread detachNewThreadSelector:@selector(fetchMap) toTarget:self withObject:nil];

    [super viewDidLoad];
}

- (void)fetchMap {
    NSAutoreleasePool *threadPool = [[NSAutoreleasePool alloc] init];

    Mappe *mappa;

    mappa = [[[MapFetcher sharedInstance] fetchManagedObjectsForEntity:@"Mappe" 
                                                     withPredicate:[NSPredicate predicateWithFormat:@"Citta == %@", map] 
                                                    withDescriptor:@"Citta"] objectAtIndex:0];
    [self performSelectorOnMainThread:@selector(showImage:) withObject:mappa waitUntilDone:YES];

    [threadPool release];

}

- (void)showImage:(Mappe *)mappa {
    imvMappa = [[UIImageView alloc] initWithFrame:CGRectMake( 0.0, 0.0, 1024.0, 704.0 )];
    [imvMappa setImage:[UIImage imageWithData:[mappa Mappa]]];
    [scrollView addSubview:imvMappa];
    [scrollView setContentSize:CGSizeMake( 1024.0, 704.0 )];
    [scrollView setMinimumZoomScale:0.5];
    [scrollView setMaximumZoomScale:4.0];
    [scrollView setZoomScale:1.0];
    [scrollView setContentMode:(UIViewContentModeScaleAspectFit)];
    [scrollView setClipsToBounds:YES];
    [scrollView setDelegate:self];
    [imvMappa release];
    [loadingImage stopAnimating];
    [waitFor setHidden:YES];
    [scrollView setHidden:NO];
}

scrollView - это выход, Mappe - это управляемый объект, и он должен работать нормально, потому что я использую его везде в приложении, и это не вызывает проблем. Я действительно застрял, что может быть причиной аварийных перезагрузок?


РЕДАКТИРОВАТЬ: анализ памяти

Я использовал Instruments - Memory Monitor, чтобы увидеть, что происходит, и он сообщает, что в момент запуска мое приложение использует 17 МБ памяти, а выделение говорит: Live Bytes 883 КБ, всего 4 МБ. Я немного сбит с толку ... Когда я запускаю приведенный выше код, я вижу: 2 МБ живых байтов (4 ViewControllers) Всего 22 МБ, в то время как монитор памяти показывает 77 МБ реальной памяти. Что я должен увидеть, чтобы иметь реальный отчет о ситуации?

1 Ответ

0 голосов
/ 21 мая 2011

У вас есть один контекст управляемого объекта, и вы передаете управляемый объект из одного потока в другой, а затем используете его.Это нет нет.Вместо этого каждый поток должен иметь свой собственный контекст управляемого объекта, и ObjectsID передаются между потоками.Получающий поток затем получает управляемый объект из собственного контекста управляемого объекта.

Дополнительная информация: http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/CoreData/Articles/cdConcurrency.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...