내 프로그램이 제대로 작동하지만 문제가 현재 행을 사용하여 행을 확장하려고합니다. 페이지 당 10 개의 뉴스를 제공하는 API가 있으며이 뉴스 제목으로 내 tableViewRow를 업데이트하고 싶습니다. 첫 번째 테이블보기 (페이지에 사용 된 IDValue)에서 첫 번째 테이블 뷰는 UIAlert 이후에로드되고 구문 분석 ([myTableView reloadData];)을 완료 한 후 구문 분석을 시작합니다. 11 번째 행에 "Load More 10 News"옵션이 있습니다.이 구문을 다시 클릭하면 구문 분석이 시작되지만 결국에는 (10 + 10 이전) news = 20 같은 다음 10 개의 뉴스 확장을 통해 내 테이블 뷰를 상향 조정하고 싶습니다. 뉴스 (행) TableView 있지만 그것은 "SIGABRT"오류를 제공합니다.문제가 10-10 뉴스를 다시로드하여 tableView 행을 확장했습니다.
나는 내 .h 및 .m 파일을 공유합니다.이 문제를 해결하고 제안을 보내주십시오. plz 어떻게이 오류가 올 수 있습니까?
오류가 28 :
2011-09-20 14 57.278 작업 [8692 : 207] * 종료 앱 인해 캐치되지 않는 예외 'NSRangeException'이유로 ' - [있는 NSMutableArray objectAtIndex :] 범위 [0 ... 10] '* 이후 인덱스 11 * 제 드로에서 호출 스택 (0 CoreFoundation에서
0x013ac5a9 exceptionPreprocess 185 + 1 libobjc.A.
0x01500313 objc_exception_throw + 44 2 CoreFoundation에서에게
0x013a20a5 dylib - [__ NSArrayM objectAtIndex을 :] + 261 3 FashionUnited
0x00005288 - [NewsMainVC있는 tableView : cellForRowAtIndexPath :] + 648 4
UIKit 0x00673b98 - [jQuery과 (UITableViewInternal) _createPreparedCellForGlobalRow : withIndexPath :] + 634 5 UIKit
0x006694cc - [jQuery과 (UITableViewInternal) _createPreparedCellForGlobalRow :] + 75 6 UIKit
0x0067e8cc - [jQuery과 (_UITableViewPrivate) _updateVisibleCellsNow :] + 1,561 7 UIKit 0x0067690 C - [jQuery과 layoutSubviews] + 242 8 QuartzCore
0x01e06a5a - [의 CALayer layoutSublayers] + 181 9 QuartzCore
0x01e08ddc CALayerLayoutIfNeeded + 220 10 QuartzCore
0x01dae0b4 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 310 11 QuartzCore 0x01daf294 _ZN2CA11Transaction6commitEv + 292 12 QuartzCore
0x01daf46d _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 99 13 CoreFoundation에서 0x0138d89b __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION + 27 14 CoreFoun dation 0x013226e7 __CFRunLoopDoObservers + 295 15 CoreFoundation에서 0x012ea857 CFRunLoopRunSpecific + 231 16 CoreFoundation에서
0x012ea761 CFRunLoopRunInMode + 97 17 GraphicsServices
0x019f61c4 GSEventRunModal + 217 18 GraphicsServices
0x019f6289 GSEventRun + 115 19 UIKit
0x0060cc93 UIApplicationMain + 1,160 20 FashionUnited
0x00002d49 main + 121 21 FashionUnited
0x00002cc5 start + 53) 의 인스턴스를 던진 후 호출 terminate 'NSException'
그리고 +10 News로 매번 TableRows를 확장하십시오. 당신이있는 tableview를 arereloading 때
.H 파일
NewsMainVC.h
@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 파일
@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