Xcode 4 и ошибка "SIGABRT"?(только для iphone, хотя) - PullRequest
3 голосов
/ 19 июня 2011

Я новичок в разработке ios и в stackoverflow. Я попытался выполнить поиск как в stackoverflow, так и в Google перед публикацией.

Я создал простое маленькое приложение, изначально просто оставил приложение только для iphone, но в конце концов решил сделать его универсальным. Я, тупо, бездельничал, когда узнал xcode 4 и переключил его на универсальный, а затем снова, поэтому мне пришлось переписать проект и сделать это снова. На этот раз я начал с универсального приложения. (Не тогда, когда я создал его, но после того, как я пошел в проект и выбрал его там). Он создал папку ipad и файл mainwindow-ipad.xib, но, конечно, был пуст, так как я еще ничего не делал. Я настроил его как приложение на основе вкладок, поэтому в моей версии для iphone были и файлы первого и второго вида пера, а в версии для iPad - нет. Сначала я установил все это в версии для iphone, и она работала нормально. Затем я пошел и положил версию ipad (я исключил вторую вкладку из mainwindow-ipad, потому что она мне не нужна)

Затем я создал новый файл пера и поместил его в папку ipad вместе с «main-ipad.h» и «main-ipad.m». Я скопировал свой код и соединил все, и он отлично работает на симуляторе ipad, но теперь, когда я пытаюсь запустить симулятор iphone, я получаю сообщение об ошибке «SIGABRT». Я сделал снимок экрана этого. Я не полностью понимаю цель-c, поэтому я надеялся кто-то может мне помочь? Я могу опубликовать любой код или что-то еще, что вам может понадобиться, чтобы помочь мне с этой ошибкой, поэтому просто спросите.

Благодарим вас за любую помощь и предложения!

Спасибо!

[Хорошо, я бы разместил изображение, но я не могу, так как я новый пользователь, вместо этого я разместил выделенную строку и вывод из xcode]

Код файла с ошибкой:

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil); //ERROR IS ON THIS LINE <-----
    [pool release];
    return retVal;
}

[ВЫХОД]

2011-06-18 17:32:43.980 Price Assist[445:207] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x4e09cc0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key finallabel.'
*** Call stack at first throw:
(
0   CoreFoundation                      0x00dc35a9 __exceptionPreprocess + 185
1   libobjc.A.dylib                     0x00f17313 objc_exception_throw + 44
2   CoreFoundation                      0x00dc34e1 -[NSException raise] + 17
3   Foundation                          0x00795677 _NSSetUsingKeyValueSetter + 135
4   Foundation                          0x007955e5 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 285
5   UIKit                               0x0021130c -[UIRuntimeOutletConnection connect] + 112
6   CoreFoundation                      0x00d398cf -[NSArray makeObjectsPerformSelector:] + 239
7   UIKit                               0x0020fd23 -[UINib instantiateWithOwner:options:] + 1041
8   UIKit                               0x00211ab7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168
9   UIKit                               0x000c7628 -[UIViewController _loadViewFromNibNamed:bundle:] + 70
10  UIKit                               0x000c5134 -[UIViewController loadView] + 120
11  UIKit                               0x000c500e -[UIViewController view] + 56
12  UIKit                               0x00038d42 -[UIWindow addRootViewControllerViewIfPossible] + 51
13  Foundation                          0x007955e5 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 285
14  UIKit                               0x00048ff6 -[UIView(CALayerDelegate) setValue:forKey:] + 173
15  UIKit                               0x0021130c -[UIRuntimeOutletConnection connect] + 112
16  CoreFoundation                      0x00d398cf -[NSArray makeObjectsPerformSelector:] + 239
17  UIKit                               0x0020fd23 -[UINib instantiateWithOwner:options:] + 1041
18  UIKit                               0x00211ab7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168
19  UIKit                               0x0001717a -[UIApplication _loadMainNibFile] + 172
20  UIKit                               0x00017cf4 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 291
21  UIKit                               0x00022617 -[UIApplication handleEvent:withNewEvent:] + 1533
22  UIKit                               0x0001aabf -[UIApplication sendEvent:] + 71
23  UIKit                               0x0001ff2e _UIApplicationHandleEvent + 7576
24  GraphicsServices                    0x00ffc992 PurpleEventCallback + 1550
25  CoreFoundation                      0x00da4944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
26  CoreFoundation                      0x00d04cf7 __CFRunLoopDoSource1 + 215
27  CoreFoundation                      0x00d01f83 __CFRunLoopRun + 979
28  CoreFoundation                      0x00d01840 CFRunLoopRunSpecific + 208
29  CoreFoundation                      0x00d01761 CFRunLoopRunInMode + 97
30  UIKit                               0x000177d2 -[UIApplication _run] + 623
31  UIKit                               0x00023c93 UIApplicationMain + 1160
32  Price Assist                        0x000029a9 main + 121
33  Price Assist                        0x00002925 start + 53
)
terminate called after throwing an instance of 'NSException'

Файл пера iPhone FirstView .h код:

@interface FirstViewController : UIViewController {
    IBOutlet UITextField *dollarinput;
    IBOutlet UITextField *centsinput;
    IBOutlet UIButton *combinevalue;
    IBOutlet UITextField *percentoffinput;
    IBOutlet UILabel *discountlabel;
    IBOutlet UILabel *finallabel;
}  
- (IBAction)calculate:(id)sender;
- (IBAction)backgroundTouched:(id)sender;
- (IBAction)autonext:(id)sender;

Файл пера iPhone FirstView. M код:

//
//  FirstViewController.m
//  Price Assist
//
//  Created by Dustin Schreiber on 6/15/11.
//  Copyright 2011 TheTechSphere.com. All rights reserved.
//

#import "FirstViewController.h"


@implementation FirstViewController

/*
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
[super viewDidLoad];
}
*/

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}


- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];

// Release any cached data, images, etc. that aren't in use.
}


- (void)viewDidUnload
{    
[percentoffinput release];
percentoffinput = nil;
[discountlabel release];
discountlabel = nil;
[finallabel release];
finallabel = nil;
[super viewDidUnload];

// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}


- (void)dealloc
{
[percentoffinput release];
[discountlabel release];
[finallabel release];
[super dealloc];
}


- (IBAction)calculate:(id)sender {
if ([centsinput.text length] == 0){
    centsinput.text = @"00";
}
if ([dollarinput.text length] == 0){
    dollarinput.text = @"00";
}
if ([percentoffinput.text length] == 0){
    percentoffinput.text = @"00";
}
double cDollars = [dollarinput.text doubleValue];
double cCents = [centsinput.text doubleValue];
double percentoff = [percentoffinput.text doubleValue] / 100;
NSString *ccDollars = [[NSNumber numberWithFloat:cDollars] stringValue];
NSString *ccCents = [[NSNumber numberWithFloat:cCents] stringValue];
NSString *placeholder = [NSString stringWithFormat:@"%@.%@", ccDollars, ccCents];
double combined = [placeholder doubleValue];
double discount = combined * percentoff;
NSString *discountholder2 =[NSString stringWithFormat:@"%.2f", discount];
discountlabel.text = discountholder2;
double newprice = (combined - discount);
NSString *str = [NSString stringWithFormat:@"%.2f", newprice];
finallabel.text = str;
dollarinput.text = ccDollars;
centsinput.text = ccCents;
percentoffinput.text = [[NSNumber numberWithFloat:percentoff] stringValue];
}

-(IBAction)backgroundTouched:(id)sender
{
[dollarinput resignFirstResponder];
[centsinput resignFirstResponder];
[percentoffinput resignFirstResponder];
}

- (IBAction)autonext:(id)sender {
if ([centsinput.text length ] >= 2) {
    if ([centsinput.text length] > 2) {
        centsinput.text = @"";
    } else {
        //next field
    }
}
}

@end

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

------------> Если кто-нибудь захочет, я выложу всю папку проекта. Просто спроси. Спасибо ребята за помощь. Я n00b с xcode, так что я еще не все понял.

Project Zipped

Ответы [ 4 ]

2 голосов
/ 19 июня 2011

Отправьте код, где вы используете finallabel, и попробуйте отладить ваше приложение, чтобы вы могли сообщить мне строку перед тем, как приложение вылетит.

Вариант 2: Попробуйте установить точку останова в malloc_error_break, чтобы мы могли получить больше информации об ошибке.

В XCode перейдите в Run -> Show -> BreakPoints (или просто cmd + option + B).Затем дважды щелкните, чтобы добавить новый символ (символьную точку останова), и введите malloc_error_break, затем нажмите enter.

Теперь запустите ваше приложение и вставьте текст консоли.

UPDATE Если вам нужна помощь http://developer.apple.com/library/mac/#recipes/xcode_help-breakpoint_navigator/articles/adding_a_symbolic_breakpoint.html


Проверьте ваши соединения внутри InterfaceBuilder, возможно, вы ошиблись с fianllabel.Также проверьте свой пользовательский класс -> класс в iphone XIB в InterfaseBuilder


ОБНОВЛЕНИЕ

Перейти к продукту -> Очистить.Тогда беги.

1 голос
/ 08 декабря 2012

Строка UIApplicationMain (argc, argv, nil, NSStringFromClass ([класс AppDelegate]));просто означает, что во время выполнения вашей программы было сгенерировано исключение.Это может варьироваться от проблемы с памятью до простой ошибки во время выполнения.Посмотрите в целевой консоли отладчика;он сообщит вам, где произошла ошибка.

Откройте меню «Симулятор iOS» в верхнем левом углу -> Сбросить содержимое и настройки.Затем выйдите из симулятора iOS и XCode, а затем перезагрузите компьютер.Это избавит от другого экземпляра процесса.

Это может сработать, это работа для меня ...........

0 голосов
/ 01 июня 2014

У меня тоже была эта ошибка.Потратив так много времени, я нашел, как это исправить.Прежде всего, зайдите в консоль и посмотрите, где находится ошибка (моя была связана с раскадровками и их кодом). Я исправил ошибку, перейдя в раскадровку.Под экраном iPhone будет небольшая желтая кнопка.Щелкните правой кнопкой мыши на нем, и вы увидите, что вызывает ошибку.Удалите (x), если есть желтый знак ошибки.

Если это не исправит вашу ошибку, попробуйте создать новый проект, а затем замените его пустые файлы старыми файлами вашего старого проекта.У меня была такая же ошибка в самом начале, и при запуске этой программы без ошибок.

Другие люди предлагают перезагрузить ноутбук и запустить его снова, перезагрузить симулятор iOS или изменить отладчик iOS (однако это не работаетв последнем x-коде, поскольку имеется только один отладчик)

Надеюсь, это поможет

0 голосов
/ 19 июня 2011

Проблема с вашим XIB файлом.Эта ошибка обычно возникает, когда ваш finalLabel неправильно подключен или больше не существует.Проверьте свои соединения в Interface Builder один раз.

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