iphone - 无限循环添加 subview
<p><p>我有点迷茫,经过无数次尝试和阅读了几篇文章,我决定写。
我的问题是,如果你从一个类(xml)中调用一个方法并且它是针对 viewcontroller 的,一切顺利
但如果我可以添加 它回到顶部重新加载 viewController 类的 viewDidLoad 进入无限循环。</p>
<p>这就是我的工作</p>
<p>类( ViewController )
.h</p>
<pre><code>#import <UIKit/UIKit.h>
@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 "skiSpeedViewController.h"
@class skiSpeedViewController;
@interface XMLStuff : NSObject <NSXMLParserDelegate> {
}
@property (retain, nonatomic) skiSpeedViewController *skiSpeedC;
</code></pre>
<p>.m</p>
<pre><code> @synthesize skiSpeedC;
- (void) parserDidEndDocument:(NSXMLParser *)parser {
NSLog(@"--%@", 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]