调用awakeFromNib时,不会调用viewDidLoad

时间:2015-09-24 07:52:44

标签: ios objective-c uitableview xcode7 viewdidload

我有一个从几个地方调用的视图控制器,第一次调用它时,调用了awakeFromNib,但是没有调用viewDidLoad。每次调用viewWillAppear和viewDidAppear。

此外,视图(UITableView子类)正常运行,但viewDidLoad中的任何内容显然都没有实现。

此视图控制器中未覆盖loadView。

用于覆盖viewDidLoad和awakeFromNib的代码:

- (void)awakeFromNib
{
// Configure for self sizing cells:
 self.tableView.estimatedRowHeight = 44;
 self.tableView.rowHeight = UITableViewAutomaticDimension;

 self.tableView.allowsSelectionDuringEditing = YES;
 self.clearsSelectionOnViewWillAppear = NO;

 self.navigationItem.title = nil;
 self.navigationItem.rightBarButtonItem = nil;
 printf("\n awake from nib \n \n ---------- \n");
}

- (void)viewDidLoad
{
 [super viewDidLoad];
 self.navigationItem.rightBarButtonItem = self.editButtonItem;
 self.tableView.allowsSelectionDuringEditing = YES;
}

如何调用awakeFromNib但是viewDidLoad不是,我该如何解决?

编辑:我收到了一个帮助修复它的答案,但是我想知道它为什么会发生,因为它可能与我的应用中的错误有关。

谢谢。

1 个答案:

答案 0 :(得分:3)

这在a comment的黑暗中有点刺痛,但结果却解决了这个问题。

确保在重写方法中调用public final class Assertions { private static final ScriptEngine ENGINE = new ScriptEngineManager().getEngineByName("nashorn"); private Assertions() { } public static void assertTrue(String expression, Object... values) { for (int i = 0; i < values.length; i++) { ENGINE.put("$" + (i+1), values[i]); } try { boolean pass = (Boolean) ENGINE.eval(expression); if (!pass) { for (int i = 0; i < values.length; i++) { expression = expression.replace("$" + (i+1), stringRepresentation(values[i])); } throw new AssertionError("An assertion has failed: " + expression); } } catch (ScriptException e) { throw new InternalError(e); } finally { for (int i = 0; i < values.length; i++) { ENGINE.getBindings(ScriptContext.ENGINE_SCOPE).remove("$" + (i+1)); } } } private static String stringRepresentation(Object o) { if (o instanceof String) { return "'" + o + "'"; } return o.toString(); } }