我遇到了问题....请帮助!
我有一个导航控制器项目。从根控制器我将视图推到具有一些信息和2个按钮的堆栈上(是,否)。 (它不能是AlertView)。如果他们按下YES按钮,我在父视图上调用一个方法(使用委托方法)并从堆栈中弹出视图。父对象上的方法将新视图推送到堆栈。我假设在子视图的重新分配之后父方法将保留在内存中,因为该方法存在于父视图上,但是当子元素被释放时,它还释放在父元素上方法内创建的所有内容。有没有人有一个解决方案来响应父视图中子视图上发生的事件,这些事件将在子视图解除分配后保留?
谢谢!
标题文件中:
#import <UIKit/UIKit.h>
@protocol decrementDelegate;
@interface decrement : UIViewController {
int currentCount;
IBOutlet UILabel *countLabel;
id <decrementDelegate> delegate;
}
@property (nonatomic, assign) id <decrementDelegate> delegate;
@end
@protocol decrementDelegate <NSObject>
-(void)decrementControllerDidFinish:(decrement *)controller
withString:(NSString *)stringValue;
@end
在实施文件中:
[self.delegate decrementControllerDidFinish:self
withString:countLabel.text];
[self.navigationController popViewControllerAnimated:YES];
呼叫者:
-(void)decrementControllerDidFinish:(decrement *)controller
withString:(NSString *)stringValue {
// Show our details
myNewChildController *viewController = [[myNewChildController alloc]
initWithNibName:@"myNewChildController" bundle:nil];
viewController.delegate = self;
[self.navigationController pushViewController:viewController animated:YES];
[viewController release];
}
使用非委托,只需在父级上调用方法:
呼叫者:
mySummary *parent = [self.navigationController.viewControllers objectAtIndex:0];
[mySummary setMyAllowOnParent:@"Allowed"];
[self.navigationController popViewControllerAnimated:YES];
父:
-(void)setMyAllowOnParent:(NSString *)aAllow {
newView *viewController = [[newView alloc] initWithNibName:@"newView" bundle:nil];
[self.navigationController pushViewController:viewController animated:YES];
[viewController release];
}
当取消分配调用者视图时,newView崩溃时发生了解除分配的错误。有谁知道如何解决这个问题?
答案 0 :(得分:0)
你是如何创建代表的?您没有意外地使用保留而不是 assign (假设您使用属性来访问它)?因为如果你使用了retain,这可能会导致问题。
顺便提一下,你提到了一些无法使用的UIAlertView,这让我觉得你创建了一个与UIAlertView类似设计的视图。也许以下链接可能有用:
how can i make popup login window similar as on istore in objective-C/cocoa-touch