//编辑:真的,没有人对此有任何建议或想法吗?我是不是错误地问了这个问题?//
我的iPhone应用程序有一个带有中等复杂数据模型的managedObjectContext.我现在正在添加撤消功能,并不清楚如何最好地处理嵌套的viewControllers(因为每个层可能会修改数据模型).
Apple的文档指出:"考虑一个显示书籍列表的应用程序,并允许您导航到详细视图,进而允许您编辑书籍的各个属性(例如其标题,作者和版权日期).您可以从列表屏幕创建一本新书,在两个其他屏幕之间导航以编辑其属性,然后导航回原始列表.如果列表视图中的撤消操作未对作者姓名进行更改,则可能看起来很奇怪两个屏幕,而不是删除整本书."
那么实现这个的最佳方法是什么?目前,我正在考虑让每个viewController保留自己的undoManager,只要它在屏幕上,它就会处于活动状态.所以我的理解是这需要以下步骤(对于每个VC):
myUndoManager
undoManager
返回的方法myManagedObjectContext.undoManager;
viewDidAppear
: myManagedObjectContext.undoManager = myUndoManager;
//首先创建,如果为零viewWillDisappear
:myManagedObjectContext.undoManager = nil;
[self.undoManager removeAllActions ];
self.myUndoManager = nil;
[self.undoManager setActionName:NSLocalizedString(@“XXX”,@“”)];
另外,我必须保持第一个响应者:
viewDidAppear
:`[self becomeFirstResponder]'canBecomeFirstResponder
方法返回YESviewWillDisappear
:[self resignFirstResponder];到目前为止,这似乎是有效的,即使在加载/卸载周期,并且很好地自包含,但我有几个问题:
我有一个类似于tee实用程序的方法.它接收通知已在管道上读取数据,然后将该数据写入一个或多个管道(连接到从属应用程序).如果从属应用程序崩溃,那么该管道坏了,我自然会得到一个异常,然后在@try ... @ catch块中处理.
这大部分时间都有效.令我困惑的是偶尔,异常会因未捕获的异常而崩溃应用程序,并指向writeData行.当它崩溃时我无法弄清楚模式是什么,但为什么它不会被抓住?(注意,这不是在调试器内部执行.)
这是代码:
//in setup:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tee:) name:NSFileHandleReadCompletionNotification object:fileHandle];
-(void)tee:(NSNotification *)notification
{
// NSLog(@"Got read for tee ");
NSData *readData = notification.userInfo[NSFileHandleNotificationDataItem];
totalDataRead += readData.length;
// NSLog(@"Total Data Read %ld",totalDataRead);
NSArray *pipes = [teeBranches objectForKey:notification.object];
if (readData.length) {
for (NSPipe *pipe in pipes {
@try {
[[pipe fileHandleForWriting] writeData:readData];
}
@catch (NSException *exception) {
NSLog(@"download write fileHandleForWriting fail: %@", exception.reason);
if (!_download.isCanceled) {
[_download rescheduleOnMain];
NSLog(@"Rescheduling");
}
return;
}
@finally {
}
}
}
Run Code Online (Sandbox Code Playgroud)
我应该提一下,我在AppDelegate> …
在OS X 10.8.4上,在测试perl程序中:
#!/usr/bin/perl
use warnings;
use strict;
use File::BaseName;
my $fname = "/usr/local/junk.txt";
my ($name, $path, $suffix1) = File::BaseName->fileparse($fname, qr'\.[^\.]*');
Run Code Online (Sandbox Code Playgroud)
我收到错误消息的任何想法:
Can't locate object method "fileparse" via package "File::BaseName"
(perhaps you forgot to load "File::BaseName"?)
Run Code Online (Sandbox Code Playgroud)
就此而言,我为什么要放File::BaseName
?如果我不这样做,它说
Undefined subroutine &main::fileparse
Run Code Online (Sandbox Code Playgroud)
perl -v给出:
这是为darwin-thread-multi-2level构建的perl 5,版本12,subversion 4(v5.12.4)
和@INC包括/System/Library/Perl/5.12/和/System/Library/Perl/5.12/File/BaseName.pm存在,并fileparse在里面.
万一它有用,当我使用File::Spec
和参考File::Spec->splitpath
,这工作正常(但我必须把整行).
我正在使用AQGridView以网格格式显示TableView.
我有一个问题,随机地,GridCell需要被轻敲两次以触发
didSelectItem
Run Code Online (Sandbox Code Playgroud)
方法.
在第一次点击时,单元格突出显示自己,但没有调用didSelectItem方法.在第二次点击时,调用该方法.
有任何想法吗?
我正在使用AQGridView构建一个iPad应用程序,它包含一个灵活的网格,就像在Apple iBooks应用程序或Marvel和DC漫画应用程序中找到的那样.我的问题是有没有人使用AQGridView,可以帮助我了解如何进行网格单元选择.它应该只是创建一个UITableView的子类,但我似乎无法找到正确的单元格选择方法.
任何帮助将不胜感激.
谢谢,
L.
我想我不完全理解containsPoint方法:
// test
CGRect compareRect = CGRectMake(-39, -62, 39, 62);
CGPoint comparePoint = CGPointMake(3, -27);
if( CGRectContainsPoint(compareRect, comparePoint) ) NSLog(@"works");
else NSLog(@"doesn't work");
Run Code Online (Sandbox Code Playgroud)
当我绘制它时,该点位于矩形内部.但它返回"不起作用".
iphone ×5
aqgridview ×3
objective-c ×3
ios ×2
ipad ×2
cocoa ×1
cocoa-touch ×1
core-data ×1
ibooks ×1
macos ×1
perl ×1