菜鸟教程小白 发表于 2022-12-12 15:39:00

ios - Objective-C View Controller 属性未保存


                                            <p><p>您好,我正在尝试设置我的 <code>UIViewController's</code> 托管对象上下文,但对象上下文未保存。代码如下:</p>

<pre><code>- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UIStoryboard *mainStoryboard = ;
my_TableViewController *viewController = ;
if (]) {
    ;
}
NSLog(@&#34;%@&#34;, self.managedObjectContext);
NSLog(@&#34;%@&#34;, viewController.oManagedObjectContext);
}
</code></pre>

<p>下面的输出是</p>

<pre><code>Apple_Tutorial &lt;NSManagedObjectContext: 0x7fb558d86600&gt;
Apple_Tutorial &lt;NSManagedObjectContext: 0x7fb558d86600&gt;
</code></pre>

<p>但是当我打电话时</p>

<pre><code>NSLog(@&#34;%@&#34;, self.oManagedObjectContext);
</code></pre>

<p>在 <code>my_TableViewController</code> 的 <code>viewDidLoad</code>() 中,输出为 <code>null</code>。 oManagedObjectContext 被声明为 <code>(strong, nonatomic)</code>。有谁知道为什么 oManagedObjectContext 变为空?</p>

<p>viewDidLoad 代码:</p>

<pre><code>- (void)viewDidLoad {
    ;
    UINib *nib = ;
    [ registerNib:nib forCellReuseIdentifier:@&#34;tableViewCell&#34;];

    NSLog(@&#34;%@&#34;, self.oManagedObjectContext);
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>问题是 <code>didFinishLaunchingWithOptions</code> 正在实例化一个新的 ViewController ,然后什么都不做(即丢弃它)。因此,您正在查看两个不同的 ViewController 实例。</p>

<hr/>

<p>您可以让应用委托(delegate)设置 Root ViewController 的 <code>oManagedObjectContext</code>:</p>

<pre><code>- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    ViewController *controller = (id)self.window.rootViewController;
    NSAssert(], @&#34;Root controller should be `ViewController`, but is %@&#34;, controller);

    controller.oManagedObjectContext = self.managedObjectContext;

    return YES;
}
</code></pre>

<p>显然,如果您的 ViewController 不是根 Controller (例如,如果它位于某些容器 ViewController 中,例如导航 Controller 、标签栏 Controller 、自定义容器 Controller 等),那么您就必须进行调整上面的代码在该层次结构中导航以找到您的 ViewController 类。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios -Objective-C   ViewController 属性未保存,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/31065866/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/31065866/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - Objective-C View Controller 属性未保存