我正在尝试创建一个 View Controller ,其中包含一个 TableView ,其中包含可编辑的自定义 UITableViewCells。现在,当我创建 View Controller 并通过调用 [self.navigationController pushController:animated:] 推送它时,它显示得很好,当我按下“返回”按钮时我可以将其弹出导航 Controller 。当我第二次创建它时,它显示得很好。但是当我第二次点击它时,我的应用程序崩溃并出现以下堆栈框架:
#0 0x01087a67 in objc_msgSend
#1 0x04b6afb0 in ??
#2 0x00f1edb5 in +[__NSArrayI __new::]
#3 0x00f21661 in -[NSArray initWithArray:range:copyItems:]
#4 0x00e89833 in -[NSArray initWithArray:copyItems:]
#5 0x00f1ac9d in -[__NSArrayM copyWithZone:]
#6 0x00e867ca in -[NSObject(NSObject) copy]
#7 0x0038a643 in -[UINavigationController viewControllers]
#8 0x0038b68c in -[UINavigationController _shouldBottomBarBeHidden]
#9 0x0038d6b7 in -[UINavigationController _hideOrShowBottomBarIfNeededWithTransition:]
#10 0x00388277 in -[UINavigationController _popViewControllerWithTransition:allowPoppingLast:]
#11 0x0038841e in -[UINavigationController popViewControllerAnimated:]
#12 0x00387856 in -[UINavigationController navigationBar:shouldPopItem:]
#13 0x0032a104 in -[UINavigationBar _popNavigationItemWithTransition:]
#14 0x00332751 in -[UINavigationBar _handleMouseUpAtPoint:]
#15 0x002f60d1 in -[UIWindow _sendTouchesForEvent:]
#16 0x002d737a in -[UIApplication sendEvent:]
#17 0x002dc732 in _UIApplicationHandleEvent
#18 0x0185ba36 in PurpleEventCallback
#19 0x00f07064 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__
#20 0x00e676f7 in __CFRunLoopDoSource1
#21 0x00e64983 in __CFRunLoopRun
#22 0x00e64240 in CFRunLoopRunSpecific
#23 0x00e64161 in CFRunLoopRunInMode
#24 0x0185a268 in GSEventRunModal
#25 0x0185a32d in GSEventRun
#26 0x002e042e in UIApplicationMain
#27 0x0000215e in main at main.m:25
StringEditorViewController的实现代码:
界面
#import <UIKit/UIKit.h>
#pragma mark -
#pragma mark String Editor Delegate
@class StringEditorViewController;
@protocol StringEditorDelegate
- (void)stringEditorWillEndEditing:(StringEditorViewController *)c;
- (void)stringEditorDidEndEditing:(StringEditorViewController *)c;
@end
#pragma mark -
#pragma mark Public Interface
@interface StringEditorViewController : UIViewController
<UITableViewDelegate,
UITableViewDataSource> {
UITableView *mainTableView;
id <StringEditorDelegate> _delegate;
NSMutableArray *_strings;
}
#pragma mark Init
- (id)initWithStrings:(NSArray *)str delegate:(id <StringEditorDelegate>)del;
#pragma mark Properties
@property (nonatomic, retain) UITableView *mainTableView;
@property (nonatomic, assign) id <StringEditorDelegate> delegate;
- (void)setStrings:(NSArray *)ns;
- (NSArray *)strings;
@end
实现
#pragma mark -
#pragma mark Private Interface
@interface StringEditorViewController (PrivateMethods)
- (UIView *)createEditorViewWithTableView:(UITableView **)tv;
@end
#pragma mark -
#pragma mark Public Implementation
@implementation StringEditorViewController
#pragma mark Init and Dealloc
- (id)initWithStrings:(NSArray *)str delegate:(id <StringEditorDelegate>)del {
self = [super init];
if(self != nil) {
UITableView *tv;
UIView *newView = [self createEditorViewWithTableView:&tv];
self.mainTableView = tv;
self.view = newView;
//[newView release];
[self setDelegate:del];
[self setStrings:str];
}
return self;
}
- (void)dealloc {
[mainTableView release];
[_strings release];
[super dealloc];
}
#pragma mark Properties
@synthesize mainTableView;
@synthesize delegate=_delegate;
- (void)setStrings:(NSArray *)ns {
if(ns = nil) {
ns = [NSArray array];
}
if(_strings != ns) {
[_strings release];
_strings = [ns mutableCopy];
}
}
- (NSArray *)strings {
return [[_strings copy] autorelease];
}
#pragma mark Table View Data Source
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
return nil;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [_strings count];
}
#pragma mark Private Methods
- (UIView *)createEditorViewWithTableView:(UITableView **)tv {
UIView *myView;
UITableView *myTableView;
CGRect viewFrame;
viewFrame = [[UIScreen mainScreen] applicationFrame];
myView = [[UIView alloc] initWithFrame:viewFrame];
myTableView = [[UITableView alloc] initWithFrame:viewFrame];
[myView addSubview:myTableView];
[myTableView setDelegate:self];
[myTableView setDataSource:self];
[myTableView autorelease];
if(tv) {
*tv = myTableView;
}
return myView;
}
@end
我知道我没有通知我的代 TableView 将要或已经消失,并且我没有填充 UITableView,但现在没有必要实现它。
如果有人能帮我解决这个问题,我会很高兴。先感谢您, IEF2
最佳答案
错误不是在 View Controller 的显示中发现的,而是在我实现的 -viewWillAppear: 和 -viewWillDisappear: 方法中显示 View Controller 的 View Controller 。在该 View Controller 中,我通知了一个委托(delegate),该委托(delegate)确实释放了 View Controller 。因此,当 View Controller 弹出两次时,一次是 View 第一次消失,一次是 View 第二次消失, View Controller 被释放,因为它的委托(delegate)释放了两次。当导航 Controller 试图访问这个刚刚被释放的 View Controller 时,程序当然会崩溃。
关于ios - 弹出时 UIViewController EXC_BAD_ACCES 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4770237/
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby数组,我们在StackOverflow上找到一
尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
由于fast-stemmer的问题,我很难安装我想要的任何rubygem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。