2012-03-17 31 views
15

私は単純なRSSアプリケーションを作成していますが、Objective-cではそれほど良くありません。アプリケーションは常に成功し、エラーや警告はありません.UITableViewではRSSを読み込みます。終了するセルを押すたびに、main.mでこのスレッドは「スレッド1:シグナルSIGABRT」と表示されます。 :Xcodeエラー - スレッド1:シグナルSIGABRT

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 

私のアプリの情報:

アプリはXcodeのバージョンによって作成された:4.3.1 アプリはiPhone用とMacBook上の「マスター・ディテール・アプリケーション」テンプレートから作成されました。私が使用しています デバッガはLLDBで、私のiPhoneシミュレータは5.1 である私は、ストーリーボード

を使用しています。ここMain.mは次のとおりです。

#import <UIKit/UIKit.h> 

#import "AppDelegate.h" 

int main(int argc, char *argv[]) 
{ 

    @autoreleasepool { 
     return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
    } 
} 

AppDelegate.hは次のとおりです。

#import <UIKit/UIKit.h> 

@interface AppDelegate : NSObject <UIApplicationDelegate> { 

    UIWindow *window; 
    UINavigationController *navigationController; 
} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController; 

@end 

私のAppDelegate.mは:

#import "AppDelegate.h" 




#import "AppDelegate.h" 
#import "MasterViewController.h" 


@implementation AppDelegate 

@synthesize window; 
@synthesize navigationController; 


#pragma mark - 
#pragma mark Application lifecycle 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
    // Override point for customization after app launch  

    [window addSubview:[navigationController view]]; 
    [window makeKeyAndVisible]; 
    return YES; 
} 


- (void)applicationWillTerminate:(UIApplication *)application { 
    // Save data if appropriate 
} 


#pragma mark - 
#pragma mark Memory management 

- (void)dealloc { 
    [navigationController release]; 
    [window release]; 
    [super dealloc]; 
} 


@end 

これは、唯一のメッセージ:あなたがもっと欲しい場合は

#import "MasterViewController.h" 

#import "DetailViewController.h" 




@implementation MasterViewController 

#pragma mark - 
#pragma mark View lifecycle 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.navigationItem.title = @"RAHNAVARD"; 
    self.navigationItem.prompt = @"LATEST NEWS"; 
    rssItems = nil; 
    rss = nil; 

    self.tableView.backgroundColor = [UIColor whiteColor]; 
    [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone]; 
    [self.tableView setIndicatorStyle:UIScrollViewIndicatorStyleWhite]; 

    //self.tableView.tableHeaderView = [[TableHeaderView alloc] initWithText:@"fetching rss feed"]; 

} 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

} 

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    if (rss==nil) { 
     rss = [[RSSLoader alloc] init]; 
     rss.delegate = self; 
     [rss load]; 
    } 
} 

/* 
- (void)viewWillDisappear:(BOOL)animated { 
[super viewWillDisappear:animated]; 
} 
*/ 
/* 
- (void)viewDidDisappear:(BOOL)animated { 
[super viewDidDisappear:animated]; 
} 
*/ 

/* 
// Override to allow orientations other than the default portrait orientation. 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
// Return YES for supported orientations. 
return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 
*/ 


#pragma mark - 
#pragma mark Table view data source 

// Customize the number of sections in the table view. 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 


// Customize the number of rows in the table view. 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    if (rss.loaded == YES) { 
     return [rssItems count]*2; 
    } else { 
     return 1; 
    } 
} 

- (UITableViewCell *)getLoadingTableCellWithTableView:(UITableView *)tableView 
{ 
    static NSString *LoadingCellIdentifier = @"LoadingCell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:LoadingCellIdentifier]; 

    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:LoadingCellIdentifier] autorelease]; 
    } 

    cell.textLabel.text = @"Loading..."; 

    UIActivityIndicatorView* activity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    [activity startAnimating]; 
    [cell setAccessoryView: activity]; 
    [activity release]; 

    return cell; 
} 

- (UITableViewCell *)getTextCellWithTableView:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath { 
    static NSString *TextCellIdentifier = @"TextCell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:TextCellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:TextCellIdentifier] autorelease]; 
    } 

    NSDictionary* item = [rssItems objectAtIndex: (indexPath.row-1)/2]; 

    //article preview 
    cell.textLabel.font = [UIFont systemFontOfSize:11]; 
    cell.textLabel.numberOfLines = 3; 
    cell.textLabel.textColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.7]; 
    cell.backgroundColor = [UIColor clearColor]; 
    cell.textLabel.backgroundColor = [UIColor clearColor]; 

    UIView *backView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease]; 
    backView.backgroundColor = [UIColor clearColor]; 
    cell.backgroundView = backView; 

    CGRect f = cell.textLabel.frame; 
    [cell.textLabel setFrame: CGRectMake(f.origin.x+15, f.origin.y, f.size.width-15, f.size.height)]; 
    cell.textLabel.text = [item objectForKey:@"description"]; 

    return cell; 
} 

// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    if (rss.loaded == NO) { 
     return [self getLoadingTableCellWithTableView:tableView]; 
    } 

    if (indexPath.row % 2 == 1) { 
     return [self getTextCellWithTableView:tableView atIndexPath:indexPath]; 
    } 

    static NSString *CellIdentifier = @"TitleCell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    UIView *backView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease]; 
    backView.backgroundColor = [UIColor clearColor]; 
    cell.backgroundView = backView; 

    NSDictionary* item = [rssItems objectAtIndex: indexPath.row/2]; 

    cell.textLabel.text = [item objectForKey:@"title"]; 

    return cell; 
} 



/* 
// Override to support conditional editing of the table view. 
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { 
// Return NO if you do not want the specified item to be editable. 
return YES; 
} 
*/ 


/* 
// Override to support editing the table view. 
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 

if (editingStyle == UITableViewCellEditingStyleDelete) { 
// Delete the row from the data source. 
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
} 
else if (editingStyle == UITableViewCellEditingStyleInsert) { 
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view. 
} 
} 
*/ 


/* 
// Override to support rearranging the table view. 
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { 
} 
*/ 


/* 
// Override to support conditional rearranging of the table view. 
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { 
// Return NO if you do not want the item to be re-orderable. 
return YES; 
} 
*/ 


#pragma mark - 
#pragma mark Table view delegate 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    [tableView deselectRowAtIndexPath:indexPath animated:NO]; 

    //DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]; 
    DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]; 
    detailViewController.item = [rssItems objectAtIndex:floor(indexPath.row/2)]; 
    [self.navigationController pushViewController:detailViewController animated:YES]; 
    [detailViewController release]; 
} 


#pragma mark - 
#pragma mark Memory management 

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

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

- (void)viewDidUnload { 
    // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand. 
    // For example: self.myOutlet = nil; 
} 


- (void)dealloc { 
    [rssItems release]; 
    rssItems = nil; 

    [rss release]; 
    rss = nil; 

    [super dealloc]; 
} 

#pragma mark - 
#pragma mark RSSLoaderDelegate 
-(void)updatedFeedWithRSS:(NSMutableArray*)items 
{ 
    rssItems = [items retain]; 
    [self.tableView reloadData]; 
} 

-(void)failedFeedUpdateWithError:(NSError *)error 
{ 
    // 
} 

@end 

-(void)fetchRss 
{ 
    NSLog(@"fetch rss"); 
    NSData* xmlData = [[NSMutableData alloc] initWithContentsOfURL:[NSURL URLWithString: kRSSUrl] ]; 
    NSError *error; 

    GDataXMLDocument* doc = [[GDataXMLDocument alloc] initWithData:xmlData options:0 error:&error]; 

    if (doc != nil) { 
     self.loaded = YES; 

     GDataXMLNode* title = [[[doc rootElement] nodesForXPath:@"channel/title" error:&error] objectAtIndex:0]; 
     [self.delegate updatedFeedTitle: [title stringValue] ]; 

     NSArray* items = [[doc rootElement] nodesForXPath:@"channel/item" error:&error]; 
     NSMutableArray* rssItems = [NSMutableArray arrayWithCapacity:[items count] ]; 

     for (GDataXMLElement* xmlItem in items) { 
      [rssItems addObject: [self getItemFromXmlElement:xmlItem] ]; 
     } 

     [self.delegate performSelectorOnMainThread:@selector(updatedFeedWithRSS:) withObject:rssItems waitUntilDone:YES]; 
    } else { 
     [self.delegate performSelectorOnMainThread:@selector(failedFeedUpdateWithError:) withObject:error waitUntilDone:YES]; 
    } 

    [doc autorelease]; 
    [xmlData release]; 
} 

MasterViewController.h:

#import <UIKit/UIKit.h> 
#import "RSSLoader.h" 
#import "DetailViewController.h" 


@interface MasterViewController : UITableViewController<RSSLoaderDelegate> { 

    RSSLoader* rss; 
    NSMutableArray* rssItems; 

} 



@end 

MasterViewController.mここ

2012-03-17 17:32:29.498 Rahnavard[1862:12e03] fetch rss 
2012-03-17 17:33:01.212 Rahnavard[1862:f803] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/hassantavari/Library/Application Support/iPhone Simulator/5.1/Applications/48090189-E17C-40CF-9BF1-ACA18FC0B02B/Rahnavard.app> (loaded)' with name 'DetailViewController'' 
*** First throw call stack: 
(0x16e4022 0x1875cd6 0x168ca48 0x168c9b9 0x366638 0x20c1fc 0x20c779 0x20c99b 0x20cd11 0x21e8fd 0x21eaef 0x21edbb 0x21f85f 0x21fe06 0x21fa24 0x393c 0x1d65c5 0x1d67fa 0xa6b85d 0x16b8936 0x16b83d7 0x161b790 0x161ad84 0x161ac9b 0x15cd7d8 0x15cd88a 0x145626 0x26a2 0x2615) 
terminate called throwing an exception(lldb) 

フェッチRSSでしたさ情報がちょうど私にそれを言う答えによって私は私の質問を編集し、あなたの答えを編集します。

本当にありがとうございます。

+6

SIGABRTは、例外がトリガーされたことを意味します。コンソールログは、正確な例外メッセージを出力し、それを見る必要があります(ここに投稿してください)。 – DarkDust

+1

ねえ、あなたのXcodeプロジェクトファイルとxib XMLファイルを追加するのを忘れました。 – Abizern

答えて

9

DetailViewControllerを名前を付けられますが、そのようなXIBは存在しないか、それはあなたの現在のターゲットのメンバーではありません。

+1

この回答に追加するには、Ctrlキーを押しながらクリックしてからコンセントを取り外します。それは私のコードのどこにもなく、これが私がそれを削除できる唯一の方法です。製品>清潔ではありませんでした。 – William

9

SIGABRTは一般的に、キャッチされない例外があることを意味します。コンソールに関する詳細が必要です。

0

SIGABRTは、他の回答に記載されているように、一般的なキャッチされない例外です。あなたは間違いなくObjective-Cについてもう少し学ぶべきです。問題はおそらくあなたのUITableViewDelegateメソッドdidSelectRowAtIndexPathにあります。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

あなたは私たちにあなたがテーブルのデータソースとデリゲートメソッドを扱うコードのようなものを表示するまで、私はずっとあなたを伝えることはできません。あなたはXIBをロードしようとしている

+0

例外がNIBをロードできないという話が出たとき、問題を引き起こしているのがテーブルビューだと思いますか? – DarkDust

+1

これは、テーブルビューのセルをタップすると発生します。しかし、もう1つ、新しいビューコントローラをどのように正確に提示していますか?バンドルを指定する必要がある場合は、[NSBundle mainBundle]があることを確認してください。また、コンパイルやビルドでエラーになる可能性があります。 XIBが正しいターゲットを持っているかどうかチェックし、クリーニング(Command + Shift + K)とクリーニング(Command + Shift + Alt + K)を試してみてください。コードの部分を見て、rssを取り出してタッチを処理できるのであれば、素晴らしいことでしょう。 (少なくともその一部) –

関連する問題