문제

확실히 무해 해 보입니다. 내 앱 대의원에서는 확인합니다 NSUSERDEFAULTS 스타트 업에서 팁을 표시하는 깃발. 그것이 설정되면, 끝에 applicationDidFinishLaunching:, 나는 이것을한다:

TipsViewController *vc = [[TipsViewController alloc]
  initWithNibName:@“TipsView" bundle:nil];
[window addSubview:vc.view];
[vc release];

아이디어는이 견해를 일시적으로 보여주는 것입니다. (이 시점에서 내비게이션 컨트롤러가 없으며 어쨌든이보기에는 내비게이션 막대가 없습니다.)

이 견해가 기각되면 선점을 추가 할 것입니다. Uitabbarcontroller창을 보는 것과 그로 전환 한 다음 기본 창에서 팁보기를 제거하십시오. 나는 아직도 독서를 계속하기 때문에 아직 해고 지점에 이르지 못했습니다.

내 TIPSVIEW의 VC는 다음과 같이 다소 연결되어 있습니다.

UIView -> view -> File’s Owner (TipsViewController)
  UIImageView -> background image
  UIView -> tipView -> File’s Owner
    UIImageView -> background image
    UIScrollView
      UILabel (tip text)
    UIButton -> touch-up-inside -> -(IBAction)button1:
    UIButton -> touch-up-inside -> -(IBAction)button2:
    UIButton -> touch-up-inside -> -(IBAction)button3:

소스에는 세 가지 모두에 대한 선언과 정의가 포함되어 있습니다 iBaction 전화. 지금 그들 중 두 명은 아무것도하지 않습니다. 세 번째는 팁을 변경합니다 text, 적합하도록 크기를 조정하고 스크롤보기를 조정합니다. contentSize 일치합니다.

앱을 실행할 때 TipsViewController 보기는 잘 나타납니다. 팁 텍스트를 스크롤 할 수도 있습니다. 그러나, 내가 터치 업 안드 사이드를 트리거 할 때 UIBIRTTON, Xcode는 소스에 나를 심기 시작합니다 (각각의 중단 점을 배치 한 위치 iBaction)… EXC_BAD_ACCESS 또는 obj_stack_overflow.

VC,보기 및 버튼이있는 앱의 다른 부분과 이것을 비교했습니다. 이 경우 모든면에서 동일합니다. VC의보기를 VC를 탐색 컨트롤러에 밀어 넣는 대신 앱 창의 서브 뷰로 추가했습니다.. 또한, iPhone OS 용 컨트롤러 프로그래밍 안내서보기 문서는 이것이 공정한 게임이라고 말합니다.

애플리케이션에서 단일보기 컨트롤러를 사용하는 경우 뷰 컨트롤러를 탭 막대 또는 탐색 컨트롤러에 추가하는 대신 뷰를 창에 추가합니다.

사실, i 하다 가지고있다 Uitabbarcontroller 날개를 기다리고 있으며 탭이 있습니다. uinavigationcontrollers (및 기타 VC). 그러나 팁보기가 표시되면 탭 바 컨트롤러의보기에는 ~ 아니다 그러나 창에 추가되었습니다. 우리가 팁을 보여준 후에 교체하는 것입니다. 다시 말해, 모든 의도와 목적을 위해, 우리는 단일 VC를 가지고있는 것처럼 일시적으로 행동하고 있습니다. 그 후, 우리는 탭 바로 전환하고 팁 VC를 찢습니다.

아마도 내가 미묘하게 잘못한 일을하고 있을까요? 더 좋은 방법이 있습니까? (“더 나은 방법이 있어야합니다!”)

샘플 스택 추적 :

#0  0x992b6f52 in objc_exception_throw
#1  0x302d6ffb in -[NSObject doesNotRecognizeSelector:]
#2  0x3026e056 in ___forwarding___
#3  0x3024a0a2 in __forwarding_prep_0___
#4  0x308f79d1 in -[UIApplication sendAction:to:from:forEvent:]
#5  0x309598b1 in -[UIControl sendAction:to:forEvent:]
#6  0x3095bad2 in -[UIControl(Internal) _sendActionsForEvents:withEvent:]
#7  0x3095a81e in -[UIControl touchesEnded:withEvent:]
#8  0x30910fdf in -[UIWindow _sendTouchesForEvent:]
#9  0x308faecb in -[UIApplication sendEvent:]
#10 0x309013e1 in _UIApplicationHandleEvent
#11 0x32046375 in PurpleEventCallback
#12 0x30245560 in CFRunLoopRunSpecific
#13 0x30244628 in CFRunLoopRunInMode
#14 0x32044c31 in GSEventRunModal
#15 0x32044cf6 in GSEventRun
#16 0x309021ee in UIApplicationMain
#17 0x00002888 in main at main.m:14

트레이스에서 볼 수 있듯이, 우리는 doesNotRecognizeSelector: … 팁 VC 소스에서 메소드를 명확하게 볼 수 있습니다. 또한, 그들은 모두 연결되어 있습니다. (IB에서는 여러 배선이나 그와 비슷한 것이 없습니다. 파일의 소유자 관계까지 모든 것이 좋아 보입니다.)

단서를 환영합니다/감사합니다!

도움이 되었습니까?

해결책

첫 번째 코드 스 니펫에 문제가 있습니다. TipsViewController 인스턴스를 만들어 뷰를 유지 한 다음 View Controller를 공개합니다. 이제 target 버튼 중 하나는 처리 된 뷰 컨트롤러에 대한 포인터입니다.

View는 View Controller를 유지하지 않으며 대의원이나 목표를 유지하지도 않습니다.

뷰 컨트롤러 인스턴스를 유지해야합니다. retain 속성 -보기가 표시되기를 원하는 한. 보기가 완료되면 부모보기에서 뷰를 제거하고 뷰 컨트롤러를 해제 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top