2017-11-10 7 views
1

내 앱이 내 iPhone 기기 및 iPad뿐만 아니라 iPhone 시뮬레이터를 제외한 모든 시뮬레이터 및 iOS에서 완벽하게 작동합니다. 앱이 시작되기 전에 충돌합니다. 다음 오류 로그와 함께; ... 이해가 안 무엇캐치되지 않은 예외로 인해 앱이 종료 됨 'NSInvalidArgumentException Xcode 9.1/iPhone X

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]' 

*** First throw call stack: 
(
    0 CoreFoundation      0x00000001127aa1ab __exceptionPreprocess + 171 
    1 libobjc.A.dylib      0x000000011078af41 objc_exception_throw + 48 
    2 CoreFoundation      0x00000001127e9f9c _CFThrowFormattedException + 194 
    3 CoreFoundation      0x00000001126beb41 -[__NSPlaceholderDictionary initWithObjects:forKeys:count:] + 321 
    4 CoreFoundation      0x000000011281d11b __createDictionary + 43 
    5 CoreFoundation      0x0000000112728cff +[NSDictionary dictionaryWithObject:forKey:] + 47 
    6 ChristmasCountdown     0x000000010dc776a4 -[Home viewDidLoad] + 20900 
    7 UIKit        0x0000000115cb38a5 -[UIViewController loadViewIfRequired] + 1235 
    8 UIKit        0x0000000115cfb1ec -[UINavigationController _updateScrollViewFromViewController:toViewController:] + 68 
    9 UIKit        0x0000000115cfb528 -[UINavigationController _startTransition:fromViewController:toViewController:] + 153 
    10 UIKit        0x0000000115cfc63f -[UINavigationController _startDeferredTransitionIfNeeded:] + 841 
    11 UIKit        0x0000000115cfd8c3 -[UINavigationController __viewWillLayoutSubviews] + 150 
    12 UIKit        0x0000000115f56a49 -[UILayoutContainerView layoutSubviews] + 231 
    13 UIKit        0x0000000115bdf6f5 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1439 
    14 QuartzCore       0x0000000113b933ee -[CALayer layoutSublayers] + 153 
    15 QuartzCore       0x0000000113b974dd _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 401 
    16 QuartzCore       0x0000000113b1fded _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 365 
    17 QuartzCore       0x0000000113b4b704 _ZN2CA11Transaction6commitEv + 500 
    18 UIKit        0x0000000115b29d3a __34-[UIApplication _firstCommitBlock]_block_invoke_2 + 141 
    19 CoreFoundation      0x000000011274d18c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12 
    20 CoreFoundation      0x000000011273196b __CFRunLoopDoBlocks + 203 
    21 CoreFoundation      0x0000000112731144 __CFRunLoopRun + 1300 
    22 CoreFoundation      0x00000001127309b9 CFRunLoopRunSpecific + 409 
    23 GraphicsServices     0x000000011467a9c6 GSEventRunModal + 62 
    24 UIKit        0x0000000115b0e5e8 UIApplicationMain + 159 
    25 ChristmasCountdown     0x000000010dc724df main + 111 
    26 libdyld.dylib      0x000000011594fd81 start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

, 다른 시뮬레이터가 잘 작동하는지, 전화 및 패드와 같은 iOS 버전 (11.1)입니다 그래서 iPhoneX에만 특정 보인다

의 viewDidLoad ;

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    tag = 1000; 
    str_Type = @"Current"; 

    //Set Navigation Bar Title 
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 50)]; 
    label.backgroundColor = [UIColor clearColor]; 
    label.font = [UIFont boldSystemFontOfSize:20.0]; 
    label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]; 
    label.textAlignment = NSTextAlignmentCenter; 
    label.text = @"Christmas Countdown"; 
    label.textColor = [UIColor whiteColor]; 
    self.navigationItem.titleView = label; 

    //Hide Not Required UILabel's 
    lbl_Time.hidden = YES; 
    lbl_Text.hidden = YES; 
    lbl_Days.hidden = YES; 
    lbl_DaysText.hidden = YES; 
    lbl_Weeks.hidden = YES; 
    lbl_WeeksText.hidden = YES; 
    img_DividerImage.hidden = YES; 

    //Initialize NSArray object with Images 
    arr_OfSanta = @[[UIImage imageNamed:@"santa1"],[UIImage imageNamed:@"santa2"],[UIImage imageNamed:@"santa3"],[UIImage imageNamed:@"santa4"],[UIImage imageNamed:@"santa5"],[UIImage imageNamed:@"santa6"]]; 

    //Initialize arr_MusicFiles & arr_MusicText Array 
    arr_MusicFiles = @[@"auld-lang-syne-piano",@"ave-maria",@"away-in-a-manger-epiano",@"carol-of-the-bells",@"come-from-stars",@"ding-dong-merrily",@"god-rest-ye-merry-gentlemen",@"herald",@"jingle-bells-country",@"joy-to-the-world",@"o-christmas-tree",@"o-come-all-ye-faithful",@"o-holy-night",@"silent-night-piano",@"we-wish-you-a-merry-christmas"]; 

    arr_MusicText = @[@"Auld Land Syne Piano",@"Ave Maria",@"Away In A Manger Epiano",@"Carol Of the Bells",@"Come From Stars",@"Ding Dong Merrily",@"God Rest ye Merry Gentlemen",@"Herald",@"Jingle Bells Country",@"Joy To the World",@"O Christmas Tree",@"O Come All Ye Faithful",@"O Holy Night",@"Silent Night Piano",@"We Wish You A Merry Christmas"]; 

    arr_OfCountryCode = @[@"AF",@"AL",@"DZ",@"AS",@"AD",@"AO",@"AI",@"AQ",@"AG",@"AR",@"AM",@"AW",@"AC",@"AU",@"AT",@"AZ",@"BS",@"BH",@"BD",@"BB",@"BY",@"BE",@"BZ",@"BJ",@"BM",@"BT",@"BO",@"BA",@"BW",@"BV",@"BR",@"IO",@"VG",@"BN",@"BG",@"BF",@"BI",@"KH",@"CM",@"CA",@"IC",@",CV",@"BQ",@"KY",@"CF",@"EA",@"TD",@"CL",@"CN",@"CX",@"CP",@"CC",@"CO",@"KM",@"CD",@"CG",@"CK",@"CR",@"HR",@"CU",@"CW",@"CY",@"CZ",@"CI",@"DK",@"DG",@"DJ",@"DM",@"DO",@"EC",@"EG",@"SV",@"GQ",@"ER",@"EE",@"ET",@"FK",@"FO",@"FJ",@"FI",@"FR",@"FG",@"PF",@"TF",@"GA",@"GM",@"GE",@"DE",@"GH",@"GI",@"GR",@"GL",@"GD",@"GP",@"GU",@"GT",@"GG",@"GN",@"GW",@"GY",@"HT",@"HM",@"HN",@"HK",@"HU",@"IS",@"IN",@"ID",@"IR",@"IQ",@"IE",@"IM",@"IL",@"IT",@"JM",@"JP",@"JE",@"JO",@"KZ",@"KE",@"KI",@"XK",@"KW",@"KG",@"LA",@"LV",@"LB",@"LS",@"LR",@"LY",@"LI",@"LT",@"LU",@"MO",@"MK",@"MG",@"MW",@"MY",@"MV",@"ML",@"MT",@"MH",@"MQ",@"MR",@"MU",@"YT",@"MX",@"FM",@"MD",@"MC",@"MN",@"ME",@"MS",@"MA",@"MZ",@"MM",@"NA",@"NR",@"NP",@"NL",@"NC",@"NZ",@"NI",@"NE",@"NG",@"NU",@"NF",@"KP",@"MP",@"NO",@"OM",@"PK",@"PW",@"PS",@"PA",@"PG",@"PY",@"PE",@"PH",@"PN",@"PL",@"PT",@"PR",@"QA",@"RO",@"RU",@"RW",@"RE",@"WS",@"SM",@"SA",@"SN",@"RS",@"SC",@"SL",@"SG",@"SX",@"SK",@"SI",@"SB",@"SO",@"ZA",@"GS",@"KR",@"SS",@"ES",@"LK",@"BL",@"SH",@"KN",@"LC",@"MF",@"PM",@"VC",@"SD",@"SR",@"SJ",@"SZ",@"SE",@"CH",@"SY",@"ST",@"TW",@"TJ",@"TZ",@"TH",@"TL",@"TG",@"TK",@"TO",@"TT",@"TA",@"TN",@"TR",@"TM",@"TC",@"TV",@"UM",@"VI",@"UG",@"UA",@"AE",@"GB",@"US",@"UY",@"UZ",@"VU",@"VA",@"VE",@"VN",@"WF",@"EH",@"YE",@"ZM",@"ZW",@"AX"]; 

    //UIView Width 
    int width = self.view.frame.size.width; 

    //Current Device Model 
    NSString *deviceType = [UIDevice currentDevice].model; 

    //this will load wether or not they bought the in-app purchase 
    areAdsRemoved = [[NSUserDefaults standardUserDefaults] boolForKey:@"areAdsRemoved"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

    if ([deviceType isEqualToString:@"iPad"]) { 
     if(areAdsRemoved){ 
      [self.scrolView_Bottom setConstant:0]; 

      //Hide BannerView 
      self.bannerView.hidden = YES; 
      self.btn_RemoveAds.hidden = YES; 
      //if they did buy it, set the background to blue. 

     } else { 

      [self.scrolView_Bottom setConstant:100]; 

      //Display BannerView 
      self.bannerView.hidden = NO; 
     } 

     //Set UIScrollView Content Size 
     self.srl_ScrollView.frame = CGRectMake(0, self.srl_ScrollView.frame.origin.y, self.view.frame.size.width, 365); 
     self.srl_ScrollView.contentSize = CGSizeMake(6*width, 365); 
     [self scrollViewDidScroll:self.srl_ScrollView]; 

     //Set Font Text Size 
     objFont = [UIFont boldSystemFontOfSize:20.0]; 

     //Adjust Constraints 
     [self.view_Bottom setConstant:100]; 
     [self.img_Top setConstant:140]; 
     [self.btnLeft_Width setConstant:150]; 
     [self.btnLeft_Height setConstant:200]; 
     [self.btnRight_Height setConstant:200]; 
     [self.btnRight_Width setConstant:150]; 
     [self.bannerView_Height setConstant:100]; 

     //Set UILabel Font Size 
     lbl_AllDays.font = [UIFont systemFontOfSize:30.0]; 
     lbl_AllHours.font = [UIFont systemFontOfSize:30.0]; 
     lbl_AllMinutes.font = [UIFont systemFontOfSize:30.0]; 
     lbl_AllSeconds.font = [UIFont systemFontOfSize:30.0]; 
     lbl_Time.font = [UIFont systemFontOfSize:55]; 
     lbl_Text.font = [UIFont systemFontOfSize:35]; 
     lbl_Weeks.font = [UIFont systemFontOfSize:55]; 
     lbl_WeeksText.font = [UIFont systemFontOfSize:35]; 
     lbl_Days.font = [UIFont systemFontOfSize:55]; 
     lbl_DaysText.font = [UIFont systemFontOfSize:35]; 

     //Add Images in UIScrollView 
     self.img_ImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.srl_ScrollView.frame.size.height)]; 
     self.img_ImageView.contentMode = UIViewContentModeScaleAspectFit; 
     self.img_ImageView.clipsToBounds = YES; 
     self.img_ImageView.image = [arr_OfSanta objectAtIndex:0]; 
     [self.srl_ScrollView addSubview:self.img_ImageView]; 
    } else { 

     if(areAdsRemoved){ 
      //Adjust UIScrollView Constraint 
      [self.scrolView_Bottom setConstant:0]; 

      //Hide BannerView 
      self.bannerView.hidden = YES; 

      self.btn_RemoveAds.hidden = YES; 
      //if they did buy it, set the background to blue. 
     } else { 
      //Adjust UIScrollView Constraint 
      [self.scrolView_Bottom setConstant:50]; 

      //Display BannerView 
      self.bannerView.hidden = NO; 
     } 

     //Current Device Screen Size 
     int height = [[UIScreen mainScreen] bounds].size.height; 

     //Set UILabelText Font Size, If Screen height 480 
     if (height == 480) { 
      //Set Font Text Size 
      objFont = [UIFont boldSystemFontOfSize:9.0]; 

      //Set UIScrollView Content Size 
      self.srl_ScrollView.frame = CGRectMake(0, self.srl_ScrollView.frame.origin.y, self.view.frame.size.width, 150); 
      self.srl_ScrollView.contentSize = CGSizeMake(6*width, 150); 

      //Adjust Constraints 
      [self.img_Top setConstant:50]; 

      //Set UILabel Font Size 
      lbl_AllDays.font = [UIFont systemFontOfSize:12.0]; 
      lbl_AllHours.font = [UIFont systemFontOfSize:12.0]; 
      lbl_AllMinutes.font = [UIFont systemFontOfSize:12.0]; 
      lbl_AllSeconds.font = [UIFont systemFontOfSize:12.0]; 
      lbl_Time.font = [UIFont systemFontOfSize:25]; 
      lbl_Text.font = [UIFont systemFontOfSize:15]; 
      lbl_Weeks.font = [UIFont systemFontOfSize:25]; 
      lbl_WeeksText.font = [UIFont systemFontOfSize:15]; 
      lbl_Days.font = [UIFont systemFontOfSize:25]; 
      lbl_DaysText.font = [UIFont systemFontOfSize:15]; 
     } 

     //Change Divider Image Top, When screen size grater than 480 
     if (height == 568) { 
      //Set Font Text Size 
      objFont = [UIFont boldSystemFontOfSize:9.0]; 

      //Set UIScrollView Content Size 
      self.srl_ScrollView.frame = CGRectMake(0, self.srl_ScrollView.frame.origin.y, self.view.frame.size.width, 150); 
      self.srl_ScrollView.contentSize = CGSizeMake(6*width, 150); 

      [self.img_Top setConstant:70]; 
     } else if (height == 667) { 
      //Set UIScrollView Content Size 
      self.srl_ScrollView.frame = CGRectMake(0, self.srl_ScrollView.frame.origin.y, self.view.frame.size.width, 240); 
      self.srl_ScrollView.contentSize = CGSizeMake(6*width, 240); 

      //Set Font Text Size 
      objFont = [UIFont boldSystemFontOfSize:11.0]; 
      [self.img_Top setConstant:90]; 
     } else if (height == 736) { 
      //Set UIScrollView Content Size 
      self.srl_ScrollView.frame = CGRectMake(0, self.srl_ScrollView.frame.origin.y, self.view.frame.size.width, 270); 
      self.srl_ScrollView.contentSize = CGSizeMake(6*width, 270); 

      objFont = [UIFont boldSystemFontOfSize:11.0]; 
      [self.img_Top setConstant:100]; 
     } 

     //Add Images in UIScrollView 
     self.img_ImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.srl_ScrollView.frame.size.height)]; 
     self.img_ImageView.contentMode = UIViewContentModeScaleAspectFit; 
     self.img_ImageView.clipsToBounds = YES; 
     self.img_ImageView.image = [arr_OfSanta objectAtIndex:0]; 
     [self.srl_ScrollView addSubview:self.img_ImageView]; 
    } 

    //Hide MKMapView 
    self.mapView.hidden = YES; 

    //Zoom In & Zoom Out Animation 
    [UIView animateWithDuration:0 animations:^{ 
     lbl_AllDays.transform = CGAffineTransformMakeScale(0.01, 0.01); 
     lbl_AllHours.transform = CGAffineTransformMakeScale(0.01, 0.01); 
     lbl_AllMinutes.transform = CGAffineTransformMakeScale(0.01, 0.01); 
     lbl_AllSeconds.transform = CGAffineTransformMakeScale(0.01, 0.01); 
    }completion:^(BOOL finished){ 
     // Finished scaling down imageview, now resize it 
     [UIView animateWithDuration:0.8 animations:^{ 
      lbl_AllDays.transform = CGAffineTransformIdentity; 
      lbl_AllHours.transform = CGAffineTransformIdentity; 
      lbl_AllMinutes.transform = CGAffineTransformIdentity; 
      lbl_AllSeconds.transform = CGAffineTransformIdentity; 
     }completion:^(BOOL finished){ 
      NSLog(@";Finished..."); 
     }]; 
    }]; 

    //Set NSTimer to Call countdownTracker method to show pending time in Christmas. 
    [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(countdownTracker:) userInfo:nil repeats:YES]; 

    //Add font object to Dictionary 
    NSDictionary *dictAttributes = [NSDictionary dictionaryWithObject:objFont forKey:NSFontAttributeName]; 

    //Set dictionary to the titleTextAttributes 
    [self.segmentControl setTitleTextAttributes:dictAttributes forState:UIControlStateNormal]; 
    [self.segmentControl setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]} forState:UIControlStateSelected]; 

    //Customize UISegmentControl 
    [self.segmentControl setBackgroundImage:[UIImage imageNamed:@"NavigatinBackground"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

    //Customize MKMapView to track Santa Location 
    geocoder = [[CLGeocoder alloc] init]; 
    cl_LocationManager = [[CLLocationManager alloc] init]; 
    cl_LocationManager.delegate = self; 
    cl_LocationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    //[cl_LocationManager requestWhenInUseAuthorization]; 
    [cl_LocationManager startUpdatingLocation]; 

    //Hide UIView's mapView 
    self.mapView.hidden = YES; 
    self.musicView.hidden = YES; 

} 

이 행은 같은 하드 코딩 글꼴 값을 볼 수있는, 내 코드 내부에서 아이폰 X

//Add font object to Dictionary 
     NSDictionary *dictAttributes = [NSDictionary dictionaryWithObject:objFont forKey:NSFontAttributeName]; 
+0

'Home' 클래스 코드 게시 – dan

+0

많은 특정 코드 세그먼트가 있습니다? – Hypergater

+0

분명히 오류는 'viewDidLoad' 메소드에 있습니다. 당신의 질문을'viewDidLoad'로 업데이트하고 에러를 일으키는 정확한 줄을 지적하십시오 – rmaddy

답변

1

에 충돌이 발생합니다;

if (height == 568) { 
      //Set Font Text Size 
      objFont = [UIFont boldSystemFontOfSize:9.0]; 

      //Set UIScrollView Content Size 
      self.srl_ScrollView.frame = CGRectMake(0, self.srl_ScrollView.frame.origin.y, self.view.frame.size.width, 150); 
      self.srl_ScrollView.contentSize = CGSizeMake(6*width, 150); 

iPhone X 전용 항목을 추가하면 완벽하게 작동합니다. objFontnil 때문에

//iPhoneX 
    } else if (height == 812) { 
     //Set UIScrollView Content Size 
     self.srl_ScrollView.frame = CGRectMake(0, self.srl_ScrollView.frame.origin.y, self.view.frame.size.width, 270); 
     self.srl_ScrollView.contentSize = CGSizeMake(6*width, 270); 

     objFont = [UIFont boldSystemFontOfSize:11.0]; 
     [self.img_Top setConstant:100]; 
    } 
1
NSDictionary *dictAttributes = [NSDictionary dictionaryWithObject:objFont forKey:NSFontAttributeName]; 

이 줄은 충돌을 일으키는 것입니다.

왜? 그건 때문에 당신이 무엇 :

if (somethingA) 
{ 
    objFont = someFont; 
} 
else if (somethingB) 
{ 
    objFont = someFont; 
} 
else if (somethingC) 
{ 
    objFont = someFont; 
} 
//... others else if 
else if (somethingN) 
{ 
    objFont = someFont; 
} 

NSDictionary *dictAttributes = [NSDictionary dictionaryWithObject:objFont forKey:NSFontAttributeName]; 

당신은 무엇을 누락하는 것은 당신이 통과되지 않을 경우, OBJ 글꼴이 초기화되지 않으며 충돌이 발생할 않을 것입니다/다른 시험의 경우합니다.

else if (somethingN) 
{ 
    objFont = someFont; 
} 
else 
{ 
    objFont = someDefaultFont; 
} 

또는 신고 할 때 처음에 objFont을 초기화하십시오.

나머지는 코드가 너무 복잡해 보입니다. 그것은 향상 될 수 있습니다, 당신은 모델을 추측하기 위해 height처럼 테스트해서는 안됩니다. 또한 "다른 경우 (높이가 iPhone X 중 하나임) 테스트를 추가 할 수 있습니다. 그러나 추한 것은 아닙니다. Apple에 새로운 높이의 새 전화가 있으면 코드가 관리되지 않는 케이스에 대해 다시 충돌하므로 그렇게하십시오. "else"또는 기본 init