Сбой приложения при [ScrollView removeFromSuperview];

#iphone #objective-c #ipad #uiscrollview #cocos2d-iphone

#iPhone #objective-c #iPad #uiscrollview #cocos2d-iphone

Вопрос:

Черт возьми, все,

Я новичок в iPhone и борюсь со следующей проблемой.
Когда я удаляю вид прокрутки с помощью следующего оператора, мое приложение выходит из строя.

 [scrollView removeFromSuperview];
  

Я добавляю uiscrollview со следующей строкой.

 [self.view addSubview:scrollView];
  

Вот журнал.

 Thread 0 Crashed:
0   libobjc.A.dylib                 0x34a80466 objc_msgSend   18
1   UIKit                           0x341aaaa8 -[UIView(Hierarchy) _makeSubtreePerformSelector:withObject:withObject:copySublayers:]   152
2   UIKit                           0x341aaace -[UIView(Hierarchy) _makeSubtreePerformSelector:withObject:withObject:copySublayers:]   190
3   UIKit                           0x341aaace -[UIView(Hierarchy) _makeSubtreePerformSelector:withObject:withObject:copySublayers:]   190
4   UIKit                           0x341c05a0 -[UIView(Hierarchy) removeFromSuperview]   208
5   UIKit                           0x34249a76 -[UIScrollView removeFromSuperview]   42
6   KabushikiShimbun                0x000387b6 -[PDFPageScrollViewController ReGenerateScrollViewAsperNewData] (PDFPageScrollViewController.m:1451)
7   KabushikiShimbun                0x00038aac -[PDFPageScrollViewController CheckPageUpdationWithDate:] (PDFPageScrollViewController.m:1441)
8   KabushikiShimbun                0x0003c472 -[PDFPageScrollViewController requestFinished:] (PDFPageScrollViewController.m:792)
9   CoreFoundation                  0x35818bb8 -[NSObject(NSObject) performSelector:withObject:]   16
10  KabushikiShimbun                0x0000e9ba -[ASIHTTPRequest reportFinished] (ASIHTTPRequest.m:1945)
11  CoreFoundation                  0x35818bb8 -[NSObject(NSObject) performSelector:withObject:]   16
12  Foundation                      0x3118178e __NSThreadPerformPerform   262
13  CoreFoundation                  0x358307d6 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__   6
14  CoreFoundation                  0x358025b0 __CFRunLoopDoSources0   376
15  CoreFoundation                  0x35801e54 __CFRunLoopRun   224
16  CoreFoundation                  0x35801c80 CFRunLoopRunSpecific   224
17  CoreFoundation                  0x35801b88 CFRunLoopRunInMode   52
18  GraphicsServices                0x320c84a4 GSEventRunModal   108
19  GraphicsServices                0x320c8550 GSEventRun   56
20  UIKit                           0x341dc322 -[UIApplication _run]   406
21  UIKit                           0x341d9e8c UIApplicationMain   664
22  KabushikiShimbun                0x00002da6 main (main.m:14)
23  KabushikiShimbun                0x00002d70 start   32
  

Есть идеи?
Спасибо.

Комментарии:

1. Можете ли вы опубликовать какой-нибудь код? Вероятно, это недопустимый объект.

2. вы проверили с помощью отладчика? например, где происходит сбой со строкой?/

3. используете ли вы scrollview firstresponder?

4. когда вызывается [ScrollView removeFromSuperview];?

5. попробуйте настроить инструкцию NSLog непосредственно перед [scrollView removeFromSuperview] , чтобы увидеть, сколько раз она вызывается. у меня была проблема такого же типа при использовании распознавателей жестов, когда они вызывались несколько раз (по причинам, которые я до сих пор не могу выяснить, кроме возможной ошибки ios). при втором их вызове ничего не удаляется из супервизора и происходит сбой приложения

Ответ №1:

Проверьте, есть ли у него супервизор, прежде чем удалять из супервизора;

 if([scrollView superview]!=nil){
    [scrollView removeFromSuperview];
}
  

Ответ №2:

Попробуйте этот код

 for(UIView *view in self.view.subviews)

{
    if([view isMemberOfClass:[UIScrollView class]])
    {
        [scrollview removeFromSuperView];
    }
}
  

Ответ №3:

Попробуйте этот код. Это протестировано.

 NSArray *subviews = [[NSArray alloc] initWithArray:self.view.subviews];
for(UIScrollView *subview in subviews) {
    [subview removeFromSuperView];
}
[subviews release];
  

но будьте осторожны, это удаляет все ScrollViews присутствующие в вашем self.view