小编mac*_*rth的帖子

是否可以将多个NSUndoManagers与一个Core-Data managedObjectContext一起使用?

//编辑:真的,没有人对此有任何建议或想法吗?我是不是错误地问了这个问题?//

我的iPhone应用程序有一个带有中等复杂数据模型的managedObjectContext.我现在正在添加撤消功能,并不清楚如何最好地处理嵌套的viewControllers(因为每个层可能会修改数据模型).

Apple的文档指出:"考虑一个显示书籍列表的应用程序,并允许您导航到详细视图,进而允许您编辑书籍的各个属性(例如其标题,作者和版权日期).您可以从列表屏幕创建一本新书,在两个其他屏幕之间导航以编辑其属性,然后导航回原始列表.如果列表视图中的撤消操作未对作者姓名进行更改,则可能看起来很奇怪两个屏幕,而不是删除整本书."


那么实现这个的最佳方法是什么?目前,我正在考虑让每个viewController保留自己的undoManager,只要它在屏幕上,它就会处于活动状态.所以我的理解是这需要以下步骤(对于每个VC):

  • 添加属性: myUndoManager
  • 添加一个undoManager返回的方法myManagedObjectContext.undoManager;
  • viewDidAppear: myManagedObjectContext.undoManager = myUndoManager;//首先创建,如果为零
  • viewWillDisappear:myManagedObjectContext.undoManager = nil;
  • 关于记忆警告: [self.undoManager removeAllActions ];
  • 关于dealloc: self.myUndoManager = nil;
  • 对于每个模型更改: [self.undoManager setActionName:NSLocalizedString(@“XXX”,@“”)];
  • CoreData将处理实际的撤消/重做发布

另外,我必须保持第一个响应者:

  • viewDidAppear:`[self becomeFirstResponder]'
  • 添加canBecomeFirstResponder方法返回YES
  • viewWillDisappear:[self resignFirstResponder];
  • 子视图重新签名时重新启用firstResponder(例如textFields)

到目前为止,这似乎是有效的,即使在加载/卸载周期,并且很好地自包含,但我有几个问题:

  • 首先,这是跨多个VC实施撤消的最佳实践吗?
  • 在我做我之前的那些之前,我的孩子VC没有做他们的动作会遇到麻烦吗?
  • 如果是这样,该列表是否会捕获我需要做的所有事情?
  • ManagedObjectContext是否会与多个正在运行的UndoManagers混淆?
  • 在交换undoManagers之前,是否需要调用ProcessPendingActions?

iphone core-data nsundomanager

11
推荐指数
1
解决办法
1080
查看次数

为什么不@try ... @ catch使用 - [NSFileHandle writeData]?

我有一个类似于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> …

cocoa objective-c

6
推荐指数
1
解决办法
1600
查看次数

为什么Perl不能找到File :: BaseName-> fileparse?

在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,这工作正常(但我必须把整行).

macos perl

4
推荐指数
1
解决办法
1990
查看次数

需要点击两次AQGridView单元以触发didSelectItem

我正在使用AQGridView以网格格式显示TableView.

我有一个问题,随机地,GridCell需要被轻敲两次以触发

didSelectItem
Run Code Online (Sandbox Code Playgroud)

方法.

在第一次点击时,单元格突出显示自己,但没有调用didSelectItem方法.在第二次点击时,调用该方法.

有任何想法吗?

iphone aqgridview

2
推荐指数
1
解决办法
769
查看次数

1
推荐指数
1
解决办法
5121
查看次数

AQGridView:进行选择

我正在使用AQGridView构建一个iPad应用程序,它包含一个灵活的网格,就像在Apple iBooks应用程序或Marvel和DC漫画应用程序中找到的那样.我的问题是有没有人使用AQGridView,可以帮助我了解如何进行网格单元选择.它应该只是创建一个UITableView的子类,但我似乎无法找到正确的单元格选择方法.

任何帮助将不胜感激.

谢谢,

L.

iphone objective-c ipad ibooks aqgridview

0
推荐指数
1
解决办法
2243
查看次数

为什么这个CGRectContainsPoint会失败?

我想我不完全理解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 objective-c ios

0
推荐指数
1
解决办法
1342
查看次数