にWebサービスからデータをロードすると-trouble - アプリケーションdidFinishLaunchingwithOptions (更新)iPhoneは、私はウィンドウベースのアプリケーションを使用して、その後appDelegate部に私の最初のnavigationviewベースのコントローラをアップロードしていますテーブルビュー
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
return YES;
}
Webサービスからデータを取得する方法は、通常、[self getData]のviewdidload ....というこのメソッドでトリガされます。方法。
- (void)viewDidLoad
{
[super viewDidLoad];
if (_refreshHeaderView == nil) {
EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.tableView.bounds.size.height, self.view.frame.size.width, self.tableView.bounds.size.height)];
view.delegate = self;
[self.tableView addSubview:view];
_refreshHeaderView = view;
[view release];
}
// update the last update date
[_refreshHeaderView refreshLastUpdatedDate];
[self loadImages];
HUDMB = [[MBProgressHUD alloc] initWithView:self.view];
[self.view addSubview:HUDMB];
HUDMB.dimBackground = YES;
// Regiser for HUD callbacks so we can remove it from the window at the right time
HUDMB.delegate = self;
HUDMB.labelText = @"Loading..";
[HUDMB show:TRUE];
[self getData];
[self.tableView reloadData];
}
ユーザーが登録されていないか、または資格情報が存在しない場合は、ロードする前にログインビューコントローラに移動します。
- (void)loadView {
[super loadView];
if([Preferences isValid]?YES:NO)
{
}
else
{
int r = arc4random() % 5;
switch (r) {
case 0:
{
loginViewController *sampleView = [[loginViewController alloc] initWithNibName:@"loginViewController" bundle:nil];
[self.navigationController presentModalViewController:sampleView animated:YES];
[sampleView release];
}
break;
case 1:
{
loginViewController *sampleView = [[loginViewController alloc] initWithNibName:@"loginViewController" bundle:nil];
[sampleView setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
[self.navigationController presentModalViewController:sampleView animated:YES];
[sampleView release];
}
break;
case 2:
{
loginViewController *sampleView = [[loginViewController alloc] initWithNibName:@"loginViewController" bundle:nil];
[sampleView setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
[self.navigationController presentModalViewController:sampleView animated:YES];
[sampleView release];
}
break;
case 4:
{
loginViewController *sampleView = [[loginViewController alloc] initWithNibName:@"loginViewController" bundle:nil];
[sampleView setModalTransitionStyle:UIModalTransitionStylePartialCurl];
[self.navigationController presentModalViewController:sampleView animated:YES];
[sampleView release];
}
break;
case 3:
{
loginViewController *sampleView = [[loginViewController alloc] initWithNibName:@"loginViewController" bundle:nil];
[sampleView setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[self.navigationController presentModalViewController:sampleView animated:YES];
[sampleView release];
}
break;
default:
break;
}
}
}
私はgetdata関数が多くの問題を引き起こしていると思います。ですから、それを追加して、データ検索とシリアライゼーションに使用する対応する関数を追加してみましょう。その後、
-(void)getData{
NSLog(@"loggin into call sheet page");
[self getCallSheetData];
NSLog(@"after call sheet");
}
- (void)getCallSheetData
{
NSString *postCMD = @"Blah... Blah... Blah...";
NSMutableData *postDataCMD = (NSMutableData *)[postCMD dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSURL *url = [NSURL URLWithString:[Preferences getURL]];
// NSLog(@"get call Sheet");
NSString *postLengthCMD = [NSString stringWithFormat:@"%d", [postDataCMD length]+1];
// NSLog(@"The CS String: %@",[Preferences retriveSession]);
requestCMD = [ASIHTTPRequest requestWithURL:url];
[requestCMD setURL:url];
[requestCMD addRequestHeader:@"Content-Length" value:postLengthCMD];
[requestCMD addRequestHeader:@"Content-Type" value:@"application/x-www-form-urlencoded"];
[requestCMD addRequestHeader:@"user-Agent" value:@"Mobile 1.4" ];
[requestCMD addRequestHeader:@"Content-Language" value:@"en-US"];
[requestCMD addRequestHeader:@"Accept-Encoding" value:@"gzip"];
[requestCMD addRequestHeader:@"Cookie" value:[Preferences retriveSession]];
[requestCMD setPostBody:postDataCMD];
[requestCMD setDelegate:self];
[requestCMD startAsynchronous];
}
- (void)requestFinished:(ASIHTTPRequest *)request
{
NSMutableArray *CSArray = [[NSMutableArray alloc] init];
if([[request responseString] isEqualToString:@"OK"]){
return;
}
// Use when fetching binary data
NSData *responseData = [request responseData];
NSDateFormatter *formatter1=[[NSDateFormatter alloc]init];
[formatter1 setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];
NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[formatter1 setTimeZone:gmt];
NSDateFormatter *formatterFinal=[[NSDateFormatter alloc]init];
[formatterFinal setDateStyle:NSDateFormatterMediumStyle];
[formatterFinal setTimeStyle: NSDateFormatterShortStyle];
[formatterFinal setLocale:[NSLocale currentLocale]];
JSONDecoder *jCSArray = [[JSONDecoder alloc]init];
NSMutableArray *theObject = [jCSArray objectWithData:responseData];
// CallSheet= [NSMutableArray arrayWithCapacity:50];
for(id key in theObject)
{
csr = [[CallSheetRecord alloc] init];
// cName,cCompany,cId,cMemberId,crcStatus,crcTarget,cImportance,cLastContact
csr.importance = @"1";
csr.rcstatus = @"1";
csr.rcTarget = @"1";
csr.company = @"";
csr.lastContact= @"";
if([key valueForKey:@"firstName"] != Nil)
{
csr.name = [NSString stringWithFormat:@"%@",[key valueForKey:@"firstName"]] ;
if ([key valueForKey:@"lastName"] != Nil) {
csr.name = [csr.name stringByAppendingString:@" "];
csr.name = [csr.name stringByAppendingString:[NSString stringWithFormat:@"%@",[key valueForKey:@"lastName"]]];
}
}
if([key valueForKey:@"company"] != Nil)
{
csr.company = [NSString stringWithFormat:@"%@",[key valueForKey:@"company"]] ;
}
if([key valueForKey:@"memberId"] != Nil)
{
csr.memberId = [NSString stringWithFormat:@"%@",[key valueForKey:@"memberId"]] ;
}
if([key valueForKey:@"id"] != Nil)
{
csr.id_ = [NSString stringWithFormat:@"%@",[key valueForKey:@"id"]] ;
}
if([key valueForKey:@"lastContact"] != Nil)
{
NSDate *finalDate =[formatter1 dateFromString:[NSString stringWithFormat:@"%@",[key valueForKey:@"lastContact"]]];
//NSString *timeStamp = [formatter1 stringFromDate:[finalDate descriptionWithLocale:[NSLocale currentLocale]]];
//NSLog(@"Time stamp : %@",[finalDate descriptionWithLocale:[NSLocale currentLocale]]);
//NSLog(@"Time stamp : %@",timeStamp);
//csr.lastContact = [key valueForKey:@"lastContact"];
csr.lastContact = [formatterFinal stringFromDate:finalDate];
}
if([key valueForKey:@"importance"] != Nil)
{
csr.importance = [NSString stringWithFormat:@"%@",[key valueForKey:@"importance"]];
}
if([key valueForKey:@"rcStatus"] != Nil)
{
csr.rcstatus= [NSString stringWithFormat:@"%@",[key valueForKey:@"rcStatus"]] ;
}
if([key valueForKey:@"rcTarget"] != Nil)
{
csr.rcTarget = [NSString stringWithFormat:@"%@",[key valueForKey:@"rcTarget"]] ;
}
[CSArray addObject:csr];
}
CSD = [CSArray mutableCopy];
[CSArray release];
[formatter1 release];
[formatterFinal release];
//CallSheetArray = [CSArray mutableCopy];
//[csr release];
[jCSArray release];
[HUDMB hide:TRUE];
[self.tableView reloadData];
}
- (void)requestFailed:(ASIHTTPRequest *)request
{
NSError *error = [request error];
UIAlertView *message = [[[UIAlertView alloc] initWithTitle:@"Hello World!"
message:[NSString stringWithFormat:@"%@",error]
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil]autorelease];
[message show];
}
右その後、私は[自己のgetData]でテーブルをロードしようとします。私はasiHTTP ..を使用してwebserviceの呼び出しを使用してmakeを得ることができます。この質問では、データを取得してデシリアライズするのに3秒かかることがあります。今は...私の質問は、後の実行では、私はユーザー名とパスワードを居住地に保管していますが、最初のインスタンスで....私はlaodにデータを取得することができませんテーブルビュー...私は多くのことを試してみました...
1.最初にデータフェッチメソッドは異なった方法で行われていました。だから私はそれが2.データの解析とデシリアライゼーションのための機能の最後にリロードデータを入れます...何も起こりません。
3.画面は、アプリの連続した起動では良い5秒間に表示何も黒い画面です....私たちはMBPorgressHUDが同じのために実装さのようなものを持つことができます。
これらのシナリオとここからどのような経路を取るべきかについてのガイダンスをお寄せください。 ...
更新: バウンティちょうどあなたができる最高の2つの質問に答える...プロパティは私が試したものでしたが、それは動作しませんでした...しかし、私の問題は...私の問題ではありません私の画面は、私が "リフレッシュする"ようになるまで私がログインした後にWebサービスからデータを読み込むことができないのですか?次に、私のアプリを起動すると、画面を表示するのに約5秒かかります(黒い画面が表示されるまで)。何がアプリケーションに表示されるのかをエンドユーザーに示す最も良い方法は何ですか?私は、ユーザーがアプリが機能していないと思わないようにしたり、電話に悪影響を与えたりしてはいけません。
なぜあなたが答えに問題がある場合は投票してください、そして、提供された情報が不十分であると分かった場合に投票を依頼した人はそれを教えてください。なぜ投票しないの? – medampudi
このような行為で怒らないでください。@medampudi - それはアドレナリンの価値がありません;)。 2番目の考えでは、あなたの質問は実際に理解するのが難しく、あなた自身でいくつかのレビューが必要な場合があります。例えばポイント3は、より多くのソースコードを提供しない限り、私たちが見つけることができないものです。 – Till
データコール用とデータをリロードするときに、いくつかのコードを投稿できますか? –