我有一个带有标签栏的应用程序,该标签栏包含一些包含用户生成内容的标签.当每个视图控制器加载时,viewDidLoad方法向服务器发出HTTP请求以获取数据,然后相应地填充其视图.但是,一旦加载了所有数据,视图将保持不变(除非卸载并重新加载视图控制器).
许多其他具有用户生成内容的应用程序具有类似的行为,除非每个视图将重新加载,如果应用程序进入后台然后再次返回到前台.也就是说,当用户在应用程序处于活动状态时在各个选项卡之间切换时,内容将不会自动刷新.如果用户"退出"应用程序然后稍后返回,则将重新加载视图.
是否有设计应用程序的标准做法以这种方式行事?具体来说,我想知道是否有UIKit细节,我可以利用它来刷新我对应用程序"重启"的看法.
否则,我想一个简单的方法是让每个视图控制器在viewDidLoad中注册通知,并监听应用程序进入前台.然后,控制器可以通过重新加载其数据来响应每个通知.
iphone nsnotifications uiviewcontroller viewdidload multitasking
任何人都可以解释为什么在使用loadView时不会调用viewDidLoad?我的理解是viewDidLoad应该仍然被调用.
- (void)loadView
{
CGRect currentFrame = [[UIScreen mainScreen] applicationFrame];
UIView* myView = [[UIView alloc] initWithFrame:CGRectMake(currentFrame.origin.x, currentFrame.origin.y, currentFrame.size.width, currentFrame.size.height)];
myView.backgroundColor = [UIColor redColor];
self.view = myView;
[myView release];
[super loadView];
}
- (void)viewDidLoad {
//this never happens
NSLog(@"VIEW DID LOAD!");
[super viewDidLoad];
}
Run Code Online (Sandbox Code Playgroud) 我viewDidLoad在视图控制器中被调用两次.一旦通过[UIViewController View],并通过第二次[UINib instanciateWithOwner:Options].为什么会这样?可以预防吗?
谢谢
uiviewcontroller uikit viewdidload ios viewcontroller-lifecyle
MediaPlayer我的应用程序启动后,我正在使用该框架播放相当大的电影(~200 MB).当我尝试在我的视频中播放视频时viewDidLoad,断点表示视图已添加,但视频未显示在设备上.
然后,我设置了一个按钮,以确认视频是否正常工作.从按钮运行IBAction显示没有问题.
所以那时我很难过.我想知道这是否与视频在应用程序启动后立即被调用的事实有关.所以我NSTimer在viewDidLoad调用中加了一个延迟5秒的时间.瞧,它运作良好.除非有最初的延迟,否则任何人都可以了解为什么视频无法播放?代码如下.
- (void)viewDidLoad {
NSTimer *currentTimer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(playMovie) userInfo:nil repeats:NO];
[[NSRunLoop mainRunLoop] addTimer:currentTimer forMode:NSRunLoopCommonModes];
[super viewDidLoad];
}
-(IBAction)playMovie
{
NSString *filepath = [[NSBundle mainBundle] pathForResource:@"Speed" ofType:@"mov"];
NSURL *fileURL = [NSURL fileURLWithPath:filepath];
MPMoviePlayerController *moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlaybackComplete:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:moviePlayerController];
[self.view addSubview:moviePlayerController.view];
moviePlayerController.fullscreen = YES;
[moviePlayerController play];
}
Run Code Online (Sandbox Code Playgroud) 我有一个带3个按钮的主视图.单击任何按钮可添加SubView.
按钮具有不同的标题,并且都链接到IBAction"switchView"
"switchView"代码如下.
- (IBAction)switchView:(id)sender{
secondView *myViewController = [[secondView alloc] initWithNibName:@"secondView" bundle:nil];
[self.view addSubview:myViewController.view];
}
Run Code Online (Sandbox Code Playgroud)
"secondView"正确加载,一切正常.
问题是我希望能够知道哪个按钮是发件人.
我不想创建3个子视图,每个按钮一个.代码和XIB绝对相同>
唯一的区别是我想在第二个视图(viewDidLoad方法)中设置的变量,具体取决于发件人是谁(单击了哪个按钮)
这可能吗?或者我需要创建3个子视图 - 每个按钮一个?
非常感谢您的帮助!
我
viewDidLoad(之前的tableView)被调用didSelectRowAtIndexPath(当前tableView).
我使用'singleton'来保持我的模型,到目前为止,它一直运作良好.我试图通过设置变量in 将当前表中选择的行传递didSelectRowAtIndexPath到目标tableview(它们通过故事板中的segue链接)didSelectRowAtIndexPath.
但是,在我可以设置行号之前调用viewDidLoad目标tableview.didSelectRowAtIndexPath稍后调用,但到那时我已经为目标表设置了我的数据(错误地).
objective-c uitableview viewdidload didselectrowatindexpath ios
这似乎是一个相当普遍的问题,但我所看到的解决方案并没有解决错误.我试图从JSON文件中读取NSMutableArray.我见过的许多建议涉及使用mutableCopy或[NSMutableArray arrayWithArray:],但这两个解决方案在使用调用replaceObjectAtIndex:withObject时都没有解决问题:见下文.如果您对如何解决此问题有任何建议,请告诉我.
编辑:我还想补充说,库存清单是NSMutableArray对象的NSMutableArray.
确切的错误如下:
Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: '-[__NSCFArray replaceObjectAtIndex:withObject:]:
mutating method sent to immutable object'
Run Code Online (Sandbox Code Playgroud)
我在我的实现文件的顶部定义了如下属性:
NSMutableArray *inventoryData;
Run Code Online (Sandbox Code Playgroud)
我试图从JSON文件中读取它,如下所示:
- (void)readJSON
{
//Code to get dictionary full of saves from JSON file (overworld.json) - includes the file path on the ipad as well as
//the dictionary itself
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *localPath = [[NSString alloc] initWithString:[documentsDirectory stringByAppendingPathComponent:@"savedPaintGameData.json"]];
NSString …Run Code Online (Sandbox Code Playgroud) 我有一个NavigationController,其中一个选项卡应该加载一个ViewController.
这个ViewController(1)加载到"viewDidLoad"时会做一些事情,然后推送一个新的ViewController(2).问题是,在ViewController(1)已经通过viewDidLoad之后,它将不会再次通过它,除非重新启动应用程序.
你们可以请一个聪明的方法来参考吗?
这就是我真正在做的事情:
- (void)viewDidLoad
{
// Keep track of cash using NSUserDefaults
BOOL dreceived[63];
int rightData;
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
//Load cash switches
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSData *data = [prefs objectForKey:@"dreceived"];
memcpy(&dreceived, data.bytes, data.length);
for(int n = 72; n >= 1; n = n - 1)
{
if(dreceived[n-1]==1)
{
rightData = n;
}
}
NSLog(@"Right Data %d", rightData);
CashItem *c = [cashflow objectAtIndex:rightData];
// Go for …Run Code Online (Sandbox Code Playgroud) 我有一个导航视图控制器,我popViewControllerAnimated(true)用来显示之前显示的视图控制器.它工作但我需要调用viewDidLoad之前显示的视图控制器来重新加载表视图.在viewDidLoad使用时,不叫popViewControllerAnimated(true).那我该怎么办呢.
可能重复:
如何保存和加载UITextField?
我已经尝试过一切,不幸的是没有什么对我有用.我可能已经测试了大约10种保存和加载UITextFields的方法,但它们不起作用.我有六个UITextFields并希望在按下按钮时保存它们并在调用viewDidLoad时加载它们.
我可以得到一些帮助,因为我必须在接下来的一两天内发布应用程序,但我仍然无法做到这一点......
谢谢,
詹姆士
viewdidload ×10
ios ×7
xcode ×4
objective-c ×3
iphone ×2
cocoa-touch ×1
loadview ×1
multitasking ×1
nstimer ×1
popup ×1
sender ×1
subview ×1
swift ×1
uibutton ×1
uikit ×1
uitableview ×1
uitextfield ×1