私は客観的なcの初心者です。他のクラスからNSArrayを呼び出すと問題が発生します。 XMLフィードの解析とUItableviewの管理を行うクラスがあります。 NSURLConnectionを使用して非同期にすると、すべてのデータが解析されますが、配列が呼び出されると配列は空になるため、NSXMLParserメソッドを使用して同期的に処理が行われるため、奇妙です。 NSLogを呼び出すと、データが解析されているときにnewsStories配列に含まれるすべてのデータが表示されますが、呼び出すと何らかの形で削除されます。私が持っているパーサクラスとNSXMLParserのすべてのメソッドに別のクラス(xcode)から呼び出すと、NSArrayは空です
:
- (void)parseXMLFileAtUrl:(NSString *)URL {
data = [[NSMutableData alloc] init];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:URL] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
if (connection) {
data = [[NSMutableData alloc]init];
}
[connection release];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
//Reset the data as this could be fired if a redirect or other response occurs
[data setLength:0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)_data
{
//Append the received data each time this is called
[data appendData:_data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
//Start the XML parser with the delegate pointing at the current object
_parser = [[NSXMLParser alloc] initWithData:data];
newsStories = [[NSMutableArray alloc] init];
[_parser setDelegate:self];
[_parser setShouldProcessNamespaces:NO];
[_parser setShouldReportNamespacePrefixes:NO];
[_parser setShouldResolveExternalEntities:NO];
[_parser parse];
}
そして、これは私は、配列を呼び出す方法です:
-(BOOL) loadData{
NSString *latestUrl = [[NSString alloc] initWithString:feed];
if ([latestArray count] == 0) {
news = [[news_parser alloc]init];
[news parseXMLFileAtUrl:latestUrl];
[self setArray:news.newsStories];--- here it says null for Array and for newsItems
}
[latestUrl release];
return YES;
}
- (void)viewDidLoad
{
[super viewDidLoad];
array = [[NSMutableArray alloc]init];
_News.rowHeight =85;
[self loadData];
[self._News reloadData];
}
すべてのヘルプは、おかげでみんなをいただければ幸いです!よろしくです。 よろしくお願いします。 Appleのドキュメントから
こんにちは!私はconnectionDidFinishLoadingメソッドを実行しました: - (void)connectionDidFinishLoading:(NSURLConnection *)接続 { _parser = [[NSXMLParser alloc] initWithData:data]; newsItems = [[NSMutableArray alloc] init]; [_parser setDelegate:self]; [_parser setShouldProcessNamespaces:NO]; [_parser setShouldReportNamespacePrefixes:NO]; [_parser setShouldResolveExternalEntities:NO]; [_parser parse]; } 配列はデータを保持していますが、これを呼び出すときに、null.sorryが来たら、これはかなり基本的ですが、助けてくれてありがとうございます – marsalal1014
今後はコメントにコードを貼り付けないでください。私は最初にあなたの記事を読んで、私はここでそれを繰り返す必要はありません。私の答えを読んで、実際に私が何を話しているのか分からない前に私の提案を試してください。 – taxilian
こんにちはタクシー、そこにコードをコピーして申し訳ありません、私は自分自身を明確に説明していないと思った。私はあなたが赤字の後、私はいくつかの研究を行い、私はあなたが意味するものを得て、カップルのデバッグの後に私はそれを得ました。あなたの視点と説明に感謝します。申し訳ありませんが、私のコメントは無礼でした。ありがとう! – marsalal1014