61. "else를 피하기 위한 명시적 중괄호" 경고
소위 "위험한 else"는 다음과 같은 코드입니다.
i
f(a== 10) printf("TEN"); else printf("NOT TEN"); a = 100;
컴파일러는 else 절이 의미 체계를 발생시킨다고 생각합니다. 잘 모르겠습니다. 무슨 뜻인가요? a가 10인지 여부에 관계없이 if가 실행된 후에 a에 100의 값이 할당되어야 합니까, 아니면 else 절에서 a에 100의 값이 할당되기를 원합니까(즉, a가 10이 아닌 경우) )?
전자인 경우 올바른 쓰기는 다음과 같습니다.
if(a== 10) { printf("TEN"); }else{ printf("NOT TEN"); } a= 100; 如果是后者,正确的写法应该是: if(a== 10) { printf("TEN"); }else{ printf("NOT TEN"); a = 100; }
물론 c/c++/java 컴파일러의 경우 이는 작은 문제일 뿐이며 컴파일 실패를 일으키지 않습니다. . 컴파일러는 실제로 전자를 선호하며 자동으로 첫 번째 경우를 처리합니다. 그러나 이는 잘못된 코딩 스타일이라는 경고를 표시합니다. #pragma clang 진단 무시 "-Wswitch" 매크로를 사용하여 이 경고를 무시하거나 컴파일 옵션 MissingBraces 및 Parentheses를 NO로 설정할 수 있습니다.
62. iPad 시뮬레이터에 홈 버튼이 표시되지 않습니다.
Xcode 4.3부터 사용자가 사용할 수 있는 공간을 더 확보하기 위해 iPad 시뮬레이터에 홈 버튼이 표시되지 않습니다. 메뉴 "하드웨어 > 홈" 또는 단축키 ⇧⌘H를 통해 홈 버튼을 교체할 수 있습니다.
63. 'NSURL'에 대한 Novisible @interface는 '쿼리' 선택기를 선언합니다.
iOS6에서는 이 메서드가 폐기되었습니다. 대신 NSURL+Parameters를 사용하세요.
64. 인증서 ID 'iphone 배포'가 두 번 이상 나타납니다
이것은 중복 인증서 오류입니다. 컴파일을 통과하려면 키체인에서 중복 인증서를 삭제해야 합니다. 그러나 Xcode를 다시 시작하면 이전에 삭제한 인증서가 다시 나타나는 것을 확인할 수 있습니다. 그러나 Xcode를 다시 시작하면 Xcode의 인증서를 키체인으로 가져오므로 키체인에서 중복 인증서를 삭제하는 것만으로는 효과가 없습니다.
많은 학생들이 Xcode의 이 버그로 인해 혐오감을 느낀다고 생각하지만 키체인에서 인증서를 반복적으로(그러나 헛되이) 삭제하는 것 외에는 다른 방법이 없습니다. 사실 Xcode만을 탓할 수는 없지만 "iPhone 구성 유틸리티 도구"와도 관련이 있습니다.
Xcode의 이러한 "잔여" 인증서는 일반 형식으로 존재하지 않습니다. "iPhone 구성 유틸리티"를 설치하는 경우 이러한 인증서는 실제로 /Users/km-cn/Library/MobileDevice/Applications/ 디렉터리의 .app 파일에 존재합니다. 이러한 .app은 실제로 "iPhone 구성 유틸리티"입니다. "응용프로그램"에서 앱을 실행하세요. Finder - "패키지 내용 표시"를 사용하여 .app을 볼 수 있습니다. "embedded.mobileprovision"이라는 파일 중 하나가 "잔여" 중복 인증서입니다. 이러한 .app을 하나씩 삭제하거나 간단히 디렉토리에 있는 모든 .app을 삭제할 수 있습니다. (어쨌든 프로젝트 파일이 존재하는 한 언제든지 이러한 .app을 컴파일하여 "iPhone 구성 유틸리티"로 가져올 수 있습니다.) . 마지막으로 Orgnizer에서 중복 인증서를 삭제하고 Xcode를 다시 시작하세요.
65. 현재 설정 'com.ydtf.dlt'와 일치하지 않는 애플리케이션 식별자 'com.ydtf.*'
보시다시피 이 두 애플리케이션 ID는 확실히 일치합니다(*는 와일드카드 문자를 나타냄). . 하지만 이 설명할 수 없는 오류로 인해 컴파일이 불가능해집니다. 이것은 확실히 Xcode의 또 다른 버그입니다. 먼저 CodeSigning을 코드 서명 안 함, 빌드로 수정한 다음 다시 올바른 서명 빌드로 수정하세요.
66. 실행 파일 서명에 사용된 ID가 더 이상 유효하지 않습니다.
이전 서명 문제로 인해 보관할 수 없습니다. 해결 방법은 질문 65를 참조하세요.
67. iPad에서 팝업 창 크기를 설정하려면 PresentModalViewController를 사용하세요.
TestViewController*testVC = [[TestViewController alloc] initWithNibName:@"TestViewController"bundle:nil]; testVC.modalPresentationStyle= UIModalPresentationFormSheet; testVC.modalTransitionStyle= UIModalTransitionStyleCrossDissolve; [selfpresentModalViewController:testVC animated:YES]; testVC.view.superview.frame= CGRectMake(0, 0, 649, 397);//it's important to do this afterpresentModalViewController testVC.view.superview.center = self.view.center;
참고: //presentModalViewController 이후에 이 작업을 수행하는 것이 중요합니다. 즉, [selfpresentModalViewController:testVC animation:YES]; 이후에 프레임 크기를 설정해야 합니다!
68. iPad에서 ActionSheet 버튼 및 팝오버 화살표 방향을 사용자 정의합니다.
ActionSheet는 iPad에서 팝오버 모드로 표시됩니다. cancelButton은 기본적으로 표시되지 않습니다. (SDK는 cancelButton 대신 Popover 외부 영역을 사용합니다. 사용자가 Popover 외부 영역을 클릭하는 한 취소 버튼을 클릭하는 것과 같습니다.)
UIActionSheet* sheet=[[UIActionSheet alloc]initWithTitle:nil delegate:self cancelButtonTitle:@"cancel" destructiveButtonTitle:@"ok" otherButtonTitles:nil];
와 같이 ActionSheet를 초기화하면 마지막에 빨간색 destructiveButton만 표시됩니다.
cancelButton을 표시해야 하는 경우 다음과 같이 할 수 있습니다.
UIActionSheet* sheet=[[UIActionSheet alloc]initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:@"cancel",@"ok",nil]; // sheet.cancelButtonIndex=0; sheet.destructiveButtonIndex=1;
destructiveButtonIndex를 지정한 후 버튼이 빨간색으로 표시됩니다.
그러나 cancelButtonIndex를 지정하지 마십시오. iPad에서는 cancelButton이 제거되기 때문입니다.
iPad에서는 SDK가 actionSheet의 화살표 방향을 수정할 수 있는 API를 제공하지 않습니다. 시스템이 화살표 표시 방향을 자동으로 결정합니다. 하지만 showFromRect의 첫 번째 매개변수를 사용하여 화살표 방향을 변경할 수 있습니다.
CGRect r=sender.bounds; r.size.width=2*self.view.bounds.size.width; r.origin.x=-self.view.bounds.size.width+sender.bounds.size.width/2+sender.frame.origin.x; [sheet showFromRect:r inView:sender animated:YES];
이렇게 하면 원래 왼쪽 화살표가 위쪽 화살표로 대체됩니다.
사실 ActionSheet의 팝업 방향을 판단할 때 iOS의 논리는 매우 간단합니다. "충분한" 공간이 있으면 거기에 팝업이 나타납니다. showFromRect의 첫 번째 매개변수를 사용하여 세 방향을 모두 "차단"하면 원하는 방향에서만 팝업이 나타날 수 있습니다.
69. setShowAccurateProgress=YES는 ASINetworkQueue에서 작동하지 않습니다.
networkQueue.showAccurateProgress= YES 앞에 request.showAccurateProgress= YES를 추가하세요. 그렇지 않으면 showAccurateProgress가 적용되지 않습니다. 샘플 코드:
equest.showAccurateProgress=YES; networkQueue.showAccurateProgress=YES; [networkQueue setSuspended:YES]; [networkQueue addOperation:request]; networkQueue.uploadProgressDelegate=self; [networkQueue go];
此外,由于 CFNework 中的一个 Bug,对于小于128K的数据,无法跟踪其上传/下载的精确进度。
70、如何设置 UIWebView 背景色为透明?
在IB中设置 UIWebView 的 Background 属性为 Clear Color 并不能使其背景透明。要达到这个目的,你需要使用以下两句:
[webView setBackgroundColor:[UIColor clearColor]];[webView setOpaque:NO];
以上就是iOS 开发百问(6)的内容,更多相关内容请关注PHP中文网(www.php.cn)!