2011-02-01 4 views
0

このコードが動作しない理由はわかりません。私は返されたデータをWebサービスからuitableviewに追加しようとしていますが、悲惨なことに失敗します。テーブルは毎回空白になります。それは、cellForRowAtIndexPathメソッドのようなものではないようです。しかし、正直なところ私は分かりません。私は何のためにそれを見つけることができない。助けてください。ありがとう!返されたWebサービスデータがテーブルビューに入力されていない

#import "RSSTableViewController.h" 


@implementation RSSTableViewController 

- (id)initWithStyle:(UITableViewStyle)style 
{ 
if (self = [super initWithStyle:style]) { 
    songs = [[NSMutableArray alloc] init]; 
} 
return self; 
} 



- (void)loadSongs 
{ 

[songs removeAllObjects]; 
[[self tableView] reloadData]; 

// Construct the web service URL 
NSURL *url =[NSURL URLWithString:@"http://localhost/get_params"]; 

NSURLRequest *request = [NSURLRequest requestWithURL:url 
             cachePolicy:NSURLRequestReloadIgnoringCacheData 
            timeoutInterval:30]; 

if (connectionInProgress) { 
    [connectionInProgress cancel]; 
    [connectionInProgress release]; 
} 

[xmlData release]; 
xmlData = [[NSMutableData alloc] init]; 

connectionInProgress = [[NSURLConnection alloc] initWithRequest:request 
                 delegate:self]; 
} 
- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [self loadSongs]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
[xmlData appendData:data]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
[connection release]; 

NSString *responseString = [[NSString alloc] initWithData:xmlData encoding:NSUTF8StringEncoding]; 

songs = [responseString componentsSeparatedByString:@","]; 

newSongs = [[NSMutableArray alloc] init]; 

for(int i=0; i < [songs count]; i++) { 
    [newSongs addObject:[songs:i]]); 
} 
    [songs autorelease]; 


[[self tableView] reloadData]; 
// 
} 

- (void)connection:(NSURLConnection *)connection 
    didFailWithError:(NSError *)error 
{ 
    [connectionInProgress release]; 
    connectionInProgress = nil; 

    [xmlData release]; 
    xmlData = nil; 

    NSString *errorString = [NSString stringWithFormat:@"Fetch failed: %@", 
         [error localizedDescription]]; 
    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:errorString 
                  delegate:nil 
                cancelButtonTitle:@"OK" 
               destructiveButtonTitle:nil 
                otherButtonTitles:nil]; 
    [actionSheet showInView:[[self view] window]]; 
    [actionSheet autorelease]; 

    [[self tableView] reloadData]; 
} 


- (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 { 
    [super viewDidUnload]; 

} 


- (void)dealloc { 
    [super dealloc]; 
} 

- (NSInteger)tableView:(UITableView *)tableView 
numberOfRowsInSection:(NSInteger)section 
{ 
    return [newSongs count]; 
} 
- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

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

    [[cell textLabel] setText:[newSongs objectAtIndex:[indexPath row]]]; 



    return cell; 
} 

@end 
+0

ウェブサービスの後にログを記録して返される内容を確認するのはなぜですか?これは1つの質問に対して多すぎるコードです。問題を絞り込む必要があります。 –

+0

しました。期待どおりにデータが配列にデータを入力しています。これはconnectionDidFinishLoadingメソッドで行われます。その後、uitableviewメソッドは、データをテーブルビューに追加したくありません。 – toneb

答えて

2

Objective-Cでは警告メッセージは無視されているようです。次のコードは、おそらく動作しないことができます:あなたは、おそらくこのようなものだった何か書くことが何を意味するのか

[newSongs addObject:[songs:i]] 

newSongs = [[NSMutableArray alloc] init]; 

for(int i=0; i < [songs count]; i++) { 
    [newSongs addObject:[songs:i]]); 
} 

なぜ:

[newSongs addObject:[songs objectAtIndex:i]] 

をしかし、その代わりに、このすべてを行いますちょうどこれを行う?

newSongs = [songs mutableCopy]; 
+0

それはよさそうだ。それは行くことができます。おかげで多く – toneb

+0

今素晴らしいです。どうもありがとう! – toneb

関連する問題