首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在重新加载10-10新闻时扩展tableView行中的问题

在重新加载10-10新闻时扩展tableView行中的问题
EN

Stack Overflow用户
提问于 2011-09-20 09:14:26
回答 1查看 201关注 0票数 0

我的程序运行良好,但问题是我想用当前行扩展我的行。我有API,它给我每页10个新闻,我想用这个新闻标题来更新我的tableViewRows。首先,当我用第一页(用于页面的IDValue )解析Api时,首先加载表视图,然后加载表视图,然后在完成解析(myTableView reloadData;)使用10条新闻原始更新tableView时开始解析,但是我有第11行,当我再次单击这个解析开始时,它有"Load More 10 news选项“,但最后我想升级我的表视图,扩展到下一个10条新闻,比如(以前的10 +新的10条新闻),TableView中的新闻= 20行,但是它给了我"SIGABRT”错误。

我与您共享我的.h和.m文件,请浏览此文件,并给我建议plz如何克服此错误。

错误是:

2011-09-20 14:28:57.278 Work8692:207个*终止应用程序由于非正常异常'NSRangeException',原因:' -NSMutableArray objectAtIndex::索引11越界0 .9‘**第一次抛出时调用堆栈:(0 CoreFoundation

0x013ac5a9 exceptionPreprocess + 185 1 libobjc.A.dylib

0x01500313 objc_exception_throw + 44 2 CoreFoundation

0x013a20a5 -__NSArrayM objectAtIndex:+ 261 3 FashionUnited

0x00005288 -NewsMainVC tableView:cellForRowAtIndexPath:+ 648 4

_createPreparedCellForGlobalRow:withIndexPath:UIKit 0x00673b98 -UITableView(UITableViewInternal) + 634 5 UIKit

0x006694cc -UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:+ 75 6 UIKit

0x0067e8cc -UITableView(_UITableViewPrivate) _updateVisibleCellsNow:+ 1561 7 UIKit 0x0067690c -UITableView layoutSubviews + 242 8 QuartzCore

0x01e06a5a -CALayer layoutSublayers + 181 9 QuartzCore

0x01e08ddc CALayerLayoutIfNeeded +220号10 QuartzCore

_ZN2CA7Context18commit_transactionEPNS_11TransactionE + 310 11 QuartzCore 0x01daf294 _ZN2CA11Transaction6commitEv + 292 12 QuartzCore

_ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 99 13 CoreFoundation 0x0138d89b __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION + 27 14 CoreFoundation 0x013226e7 __CFRunLoopDoObservers + 295 15 CoreFoundation 0x012e857 CFRunLoopRunSpecific + 231 16 CoreFoundation

0x012e761 CFRunLoopRunInMode + 97 17 GraphicsServices

0x019f61c4 GSEventRunModal + 217 18 GraphicsServices

0x019f6289 GSEventRun + 115 19 UIKit

0x0060cc93 UIApplicationMain + 1160 20 FashionUnited

0x00002d49 main + 121 21 FashionUnited

在抛出'NSException‘实例后调用0x00002cc5开始+ 53 )终止

每次都用+10新闻扩展TableRows。

.h文件

NewsMainVC.h

代码语言:javascript
复制
@class DetailNewsDisplayController,NewsInfo,NewsParser;

@interface NewsMainVC : UIViewController <UITableViewDelegate,UITableViewDataSource> {

    int selectedLanguage;
    int currentLanguage;

    NSInteger IDValue;

    NSMutableData *responseData;

    NewsParser *parser;

    NSURL *url;
    UIAlertView *alert;
    NewsInfo *aNewsInfo;

    NSString *FinalString;
    UIAlertView *alertNext;

    UITableViewCell *nibLoadedCell;
    UIActivityIndicatorView *spinnerNext;

    DetailNewsDisplayController *ndvController;

    UIActivityIndicatorView *spinner;
    UIAlertView *alertt;

    IBOutlet UILabel *textLabel;
    IBOutlet UITextView *textView;
    IBOutlet UILabel *titleLabel;
    IBOutlet UIImageView *imageLabel;
    IBOutlet UITableView *myTableView;


}
@property (nonatomic, retain) UIAlertView *alertt;
@property (nonatomic, retain) UIActivityIndicatorView *spinner;
@property (assign, readwrite) NSInteger IDValue;
@property (assign,readwrite) int selectedLanguage;
@property (nonatomic, retain) NSString *FinalString;
@property (nonatomic, retain) IBOutlet UILabel *pages;
@property (nonatomic,retain) IBOutlet UITableViewCell *nibLoadedCell;
@property (nonatomic,retain) NSData *responseData;

-(IBAction) goToOptions:(id)sender;

- (void) parseXML;

-(NSString*) languageSelectedStringForKey:(NSString*) key;

.m文件

代码语言:javascript
复制
@implementation NewsMainVC
@synthesize selectedLanguage;
@synthesize nibLoadedCell,optionPageVC,FinalString,IDValue,spinner,alertt,responseData;


extern int global;


- (void)viewDidLoad
{
    // Do any additional setup after loading the view from its nib.

    appDelegate = (WorkAppDelegate *)[[UIApplication sharedApplication] delegate];
    IDValue = 1;
    textLabel.text=[self languageSelectedStringForKey:@"Welcome to Advance Localization"];

    NSString *mainWaitMessage = NSLocalizedString (@"Contacting Server\nPlease Wait...", @"Contacting Server\nPlease Wait...");
    alert = [[[UIAlertView alloc] initWithTitle:mainWaitMessage message:nil delegate:self cancelButtonTitle:nil otherButtonTitles: nil] autorelease];
    [alert show];
    spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    spinner.center = CGPointMake(alert.bounds.size.width / 2, alert.bounds.size.height - 50);
    [alert addSubview:spinner];
    [spinner startAnimating];

    [super viewDidLoad];

}

- (void)viewWillAppear:(BOOL)animated{

    [myTableView reloadData];
}


#pragma ----------------------
#pragma Select APi According to selectedLanguage

-(NSString*) languageSelectedStringForKey:(NSString*) key
{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"zh" ofType:@"lproj"];

    if(selectedLanguage==MGD_LANG)
    {

        FinalString = [[NSString alloc] initWithFormat:@"http://www.xyz.com/api.php?page_id=%d",IDValue];

    }
    else if(selectedLanguage==TKY_LANG)
    {

        FinalString = [[NSString alloc] initWithFormat:@"http://www.abc.com/api.php?page_id=%d",IDValue];

    }

     url = [[NSURL alloc] initWithString:FinalString];
    [FinalString release];

    // Create the Request.
    NSURLRequest *request = [NSURLRequest requestWithURL:url
                                             cachePolicy:NSURLRequestUseProtocolCachePolicy 
                                         timeoutInterval: 30.0];
   // [url release];

    // Create the connection and send the request
    NSURLConnection *connection = 
    [[NSURLConnection alloc] initWithRequest:request delegate:self];

    // Make sure that the connection is good
    if (connection) {
        // Instantiate the responseData data structure to store to response
        self.responseData = [NSMutableData data];

    }
    else {
        NSLog (@"The connection failed");
    }

    NSBundle* languageBundle = [NSBundle bundleWithPath:path];
    NSString* str=[languageBundle localizedStringForKey:key value:@"" table:nil];

    return str;

}

#pragma mark -
#pragma mark NSURLConnection delegate methods

// Called when a redirect will cause the URL of the request to change
- (NSURLRequest *)connection:(NSURLConnection *)connection 
             willSendRequest:(NSURLRequest *)request 
            redirectResponse:(NSURLResponse *)redirectResponse
{
    NSLog (@"connection:willSendRequest:redirectResponse:");
    return request;
}

// Called when the server requires authentication
- (void)connection:(NSURLConnection *)connection 
didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
    NSLog (@"connection:didReceiveAuthenticationChallenge:");
}

// Called when the authentication challenge is cancelled on the connection
- (void)connection:(NSURLConnection *)connection 
didCancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
    NSLog (@"connection:didCancelAuthenticationChallenge:"); 
}

// Called when the connection has enough data to create an NSURLResponse
- (void)connection:(NSURLConnection *)connection
didReceiveResponse:(NSURLResponse *)response {
    NSLog (@"connection:didReceiveResponse:");
    NSLog(@"expectedContentLength: %qi", [response expectedContentLength] );
    NSLog(@"textEncodingName: %@", [response textEncodingName]);

    [self.responseData setLength:0];

}

// Called each time the connection receives a chunk of data
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    NSLog (@"connection:didReceiveData:");

    // Append the received data to our responseData property
    [self.responseData appendData:data];

}

// Called before the response is cached
- (NSCachedURLResponse *)connection:(NSURLConnection *)connection
                  willCacheResponse:(NSCachedURLResponse *)cachedResponse
{
    NSLog (@"connection:willCacheResponse:");
    // Simply return the response to cache
    return cachedResponse;
}

// Called when the connection has successfully received the complete response
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog (@"connectionDidFinishLoading:");

    // Convert the data to a string and log the response string
    NSString *responseString = [[NSString alloc] 
                                initWithData:self.responseData
                                encoding:NSUTF8StringEncoding];
    NSLog(@"Response String: \n%@", responseString);

    [responseString release];
    [connection release];

    [self parseXML];


}

// Called when an error occurs in loading the response
- (void)connection:(NSURLConnection *)connection 
  didFailWithError:(NSError *)error
{
    NSLog (@"connection:didFailWithError:");
    NSLog (@"%@",[error localizedDescription]);

    [connection release];

}


- (void) parseXML{

    NSLog (@"parseXML");

    // Initialize the parser with our NSData from the RSS feed
    NSXMLParser *xmlParser = [[NSXMLParser alloc] 
                              initWithData:self.responseData];

    //Initialize the delegate.
    parser = [[NewsParser alloc] initXMLParser];

    //Set delegate
    [xmlParser setDelegate:parser];

    // Start the parser
    if (![xmlParser parse])
    {
        NSLog (@"An error occurred in the parsing");    
    }

    [myTableView reloadData];

    if (IDValue == 1) {
    [spinner stopAnimating];
    [alert dismissWithClickedButtonIndex:0 animated:YES];
    }

    [xmlParser release];

}


#pragma -
#pragma TableView

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [appDelegate.newsArray count]+1;

}


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

    static NSString *postCellId = @"postCell";
    static NSString *moreCellId = @"moreCell";
    UITableViewCell *cell = nil;

    NSUInteger row = [indexPath row];
    NSUInteger count = [appDelegate.newsArray count];

    if (row == count) {

        cell = [tableView dequeueReusableCellWithIdentifier:moreCellId];
        if (cell == nil) {

            if (cell == nil) {
                [[NSBundle mainBundle] loadNibNamed:@"TableCell103" owner:self options:NULL];
                cell = nibLoadedCell;
            }

        }

    } else {

        cell = [tableView dequeueReusableCellWithIdentifier:postCellId];
        if (cell == nil) {
            [[NSBundle mainBundle] loadNibNamed:@"TableCell13" owner:self options:NULL];
            cell = nibLoadedCell;
        }

        aNewsInfo = [appDelegate.newsArray objectAtIndex:indexPath.row];
        titleLabel.text = [aNewsInfo.title stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
        imageLabel.image = aNewsInfo.smallImageData;
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }

    return cell;
}


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

    NSLog(@" Global %d",global);

    NSUInteger row = [indexPath row];
    NSLog(@"%d",row);

    NSUInteger count = [appDelegate.newsArray count];
    NSLog(@"Ini AppDelegate Count  %d",count);

    if (row == count) {


        NSMutableArray *newPosts = [[NSArray alloc] initWithArray:appDelegate.newsArray];  
        NSUInteger newCount = [newPosts count];
        NSLog(@"NewPost  %d",newCount);

        selectedLanguage = global;
        IDValue = IDValue +1;
        textLabel.text=[self languageSelectedStringForKey:@"Welcome to Advance Localization"];

        if (newPosts) {
            [appDelegate.newsArray addObjectsFromArray:newPosts];

            NSUInteger countOne = [appDelegate.newsArray count];
            NSLog(@"appdelegate+newPosts %d",countOne);
            NSUInteger newCountTwo = [newPosts count];
            [newPosts release];
            NSLog(@"NewPost %d",newCountTwo);
            NSMutableArray *insertIndexPaths = [NSMutableArray array];

            for (NSUInteger item = newCount; item < countOne; item++) {

                [insertIndexPaths addObject:[NSIndexPath indexPathForRow:item 
                                                               inSection:0]];
            }

            [myTableView beginUpdates];
            [myTableView insertRowsAtIndexPaths:insertIndexPaths 
                                  withRowAnimation:UITableViewRowAnimationFade];
            [myTableView endUpdates];

            [myTableView scrollToRowAtIndexPath:indexPath 
                                  atScrollPosition:UITableViewScrollPositionNone 
                                          animated:YES];

            NSIndexPath *selected = [myTableView indexPathForSelectedRow];
            if (selected) {
                [myTableView deselectRowAtIndexPath:selected animated:YES];
            }

        }

    }
    else {

        ndvController = [[DetailNewsDisplayController alloc] initWithNibName:@"DetailNewsDisplayController" bundle:[NSBundle mainBundle]];
        aNewsInfo = [appDelegate.newsArray objectAtIndex:indexPath.row];

        ndvController.aNewsInfo = aNewsInfo;

        [[self navigationController] pushViewController:ndvController 
                                               animated:YES];
        [ndvController release];
    }
}


-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *)indexPath
{
    return 63;
}




@end
EN

回答 1

Stack Overflow用户

发布于 2011-09-20 09:25:34

在浏览表视图时,必须增加行的编号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7482788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档