菜鸟教程小白 发表于 2022-12-13 09:28:32

iphone - 无限循环添加 subview


                                            <p><p>我有点迷茫,经过无数次尝试和阅读了几篇文章,我决定写。
我的问题是,如果你从一个类(xml)中调用一个方法并且它是针对 viewcontroller 的,一切顺利
但如果我可以添加 它回到顶部重新加载 viewController 类的 viewDidLoad 进入无限循环。</p>

<p>这就是我的工作</p>

<p>类( ViewController )
.h</p>

<pre><code>#import &lt;UIKit/UIKit.h&gt;

@classXMLStuff;

@interface skiSpeedViewController : UIViewController {
}

@property (nonatomic, retain) XMLStuff *xml;
</code></pre>

<p>.m</p>

<pre><code>- (void)viewDidLoad
{
    ;

    xml.skiSpeedC = self;

    GpsStuff *gps = ;
    ;
}
</code></pre>

<p>gps.m</p>

<pre><code>- (id)init
{
    self = ;
    if (self) {
      xml = ;
}
}
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
   ;
</code></pre>

<p>xml.h</p>

<pre><code>#import &#34;skiSpeedViewController.h&#34;

@class skiSpeedViewController;

@interface XMLStuff : NSObject &lt;NSXMLParserDelegate&gt; {
}

@property (retain, nonatomic) skiSpeedViewController *skiSpeedC;
</code></pre>

<p>.m</p>

<pre><code>   @synthesize skiSpeedC;

- (void) parserDidEndDocument:(NSXMLParser *)parser {
NSLog(@&#34;--%@&#34;, self.skiSpeedC); // Return (null)
;
}
</code></pre>

<p>ViewController.m</p>

<pre><code>    -(void)riceviDic:(NSMutableDictionary *)dictMeteo {
      datiMeteo = [initWithDictionary:dictMeteo];
    }
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><pre><code>- (void) parserDidEndDocument:(NSXMLParser *)parser {
    classViewController *skiSpeedC = ;
    ;
}
</code></pre>

<p>您每次都在创建 <code>classViewController</code> 的新实例。您的“xml”类(XMLStuff?)应该有一个指向 ViewController 的指针,并在该实例上调用 <code>riceviDic</code> 方法。</p>

<p>你得到了一个无限循环,因为当你在 viewDidLoad 中分配 XML 对象时,它也开始解析 XML,然后创建更多的 XML 对象,然后创建更多的 viewControllers... </p>

<p>所以,给 XMLStuff 添加一个 classViewController 类型的属性,当你在 viewDidLoad 中创建它时:</p>

<pre><code>xml.skiSpeedC = self;
</code></pre>

<p>然后,在 parserDidEndDocument 中:</p>

<pre><code>- (void) parserDidEndDocument:(NSXMLParser *)parser {
    ;
}
</code></pre>

<p><strong>更新</strong> </p>

<p>好的,在你编辑之后,事情看起来很不一样 - 你似乎引入了一个新类 - GpsStuff,它有它自己的<em>自己的</em> XMLStuff 实例(以及一个看起来很狡猾的 init 方法,我假设你没有'没有正确复制?)。哪一个实际上在解析您的文档? XMLStuff 在您的 ViewController 中,还是在 GPSStufF 中?我猜是 GPSStuff 中的那个,您没有为其设置 <code>skiSpeedC</code> 属性。我之前假设您从 ViewController 调用所有内容。 </p>

<p>为什么不从 GPSStuff 中删除新 XMLStuff 对象的创建,当您在 ViewController 中创建 GPSStuff 时,将您创建的 <code>xml</code> 对象传递给它:</p>

<pre><code>- (void)viewDidLoad
{
    ;

    GpsStuff *gps = [ init];
    XMLStuff *xml = [ init];
    xml.skiSpeedC = self;
    gps.xml = xml;
    ;
}
</code></pre>

<p>另外,<code>skiSpeedC</code> 属性可能不应该是 <code>retain</code>,因为它本质上是一个委托(delegate)分配,并且在您释放 xml 之前不会释放 ViewController 解析器。 </p>

<p>请注意,按照惯例,您应该像这样初始化对象:</p>

<pre><code>GPSStuff *gps = [ init];
</code></pre>

<p>不在两行。您希望将 <code>init</code> 返回的内容分配给您的变量。</p></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - 无限循环添加 subview ,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/7809229/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/7809229/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - 无限循环添加 subview