小编BJ *_*mer的帖子

目标C:给定一个类ID,我可以检查这个类是否实现了某个协议?或者有一个选择器?

我想将它用于对象工厂:给定一个字符串,创建一个Class,如果这个Class支持一个协议(使用Create()方法),那么分配该类并调用Create.

protocols class objective-c objectfactory

38
推荐指数
2
解决办法
2万
查看次数

UIView vs UIViewController

好的,所以我对iphone开发很新,我已经知道了很多.我只需要帮助决定如何将这些4-6张图片编程到我的项目中.

我基本上想制作一本漫画书,用户可以从一张图片滑动到另一张图片.所有这些图片都应该在UIVIEW或UIViewController中吗?

以及关于连接这些图片的任何提示,以便我可以添加触摸代码将是太棒了!

iphone cocoa-touch uiviewcontroller uiview

28
推荐指数
3
解决办法
2万
查看次数

initWithNibName VS NSBundle的loadNibNamed

我注意到有两种不同的加载nib/xib文件的方法:

  1. 通过UIView的initWithNibName:bundle:方法
  2. NSBundle的loadNibNamed:owner:options:方法.

有人可以解释这两者之间的差异,以及何时使用一个而不是另一个以及在什么情况下更合适?

例如,如果我从tableView:viewForHeaderInSection:方法中的nib文件加载自定义表节标题视图,我将使用哪一个?

或者,如果我从nib文件加载自定义表视图单元格,我会使用哪一个?

iphone cocoa-touch objective-c uitableview nib

17
推荐指数
2
解决办法
3905
查看次数

谁拥有NSWindowController,在标准做法?

在看到负责释放NSWindowController对象后,我正在寻求进一步的澄清

我正在为我的侄子写一个简单的库存管理应用程序.我有一个表格视图,显示其"库"等的内容.要向库中添加新项目,他们会单击"+"按钮.此按钮将打开一个新窗口,提示他们输入项目的详细信息,并在单击"确定"时验证输入.

所有这一切都很好.但是,我对内存管理有疑问.要创建新窗口,我使用以下代码:

- (IBAction)addNewItem:(id)sender {
  LibraryItemEditorController *editorController = 
    [[LibraryItemEditorController alloc] 
          initWithWindowNibName:@"LibraryItemEditor"];

  [editorController showWindow:nil];
  // editorController is "leaked" here, it seems.
}
Run Code Online (Sandbox Code Playgroud)

我不能editorController在最后发布(也不自动发布)addNewItem:,因为没有别的东西在引用editorController; 如果我释放它,窗口会立即消失.但是,我希望窗口控制器在窗口关闭后释放.在Apple的Window Programming Guide中,我阅读了以下内容:

如果你想关闭一个窗口使窗口和窗口控制器在它不是文档的一部分时消失,你的子类 NSWindowController可以观察 NSWindowWillCloseNotification或作为窗口委托实现该 windowWillClose:方法并在下面包含以下代码行:你的实施:

[self autorelease];
Run Code Online (Sandbox Code Playgroud)

我用过窗口控制器[self autorelease]windowWillClose:方法.这样做,并且不会泄漏内存.然而,它只是感觉丑陋; addNewItem:看起来它正在泄漏记忆,而静态分析也是如此. 知道它实际上是在照顾windowDidClose:,但它只是感觉不对.此外,窗口控制器现在正在释放自身,而没有保留自己.这一切都违背了我所学到的内存管理规则.

我的另一个选择是把父控制器(可以是伊娃NSWindowControllerNSMutableSetNSWindowController多个),然后查看该NSWindowWillCloseNotification父控制器和响应释放.这更清洁,可能就是我要做的.不过,这也是一项相当多的工作,这引出了我的问题.

正在注意NSWindowDidCloseNotification这样做的标准方式吗?NSWindowControllers根据需要创建和销毁的标准管理方法是什么?这是[self autorelease]传统推荐选项的方式,现在我们只有静态分析这是一个问题吗?

cocoa objective-c

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

如何获得NSTextView的选择方向?

我正试图获得所选范围的方向NSTextView.换句话说,当您使用shift+leftarrow和时,所选范围是否会更改其位置或长度shift+rightarrow.我的第一个虽然是selectionAffinity代表方向,但它似乎只适用于多行选择.

如何获得所选范围的方向?

text objective-c selection nstextview

11
推荐指数
2
解决办法
575
查看次数

使用Swift处理AppKit中的键盘事件

我有一个自定义的NSView子类,需要处理一些键盘事件.在Objective-C中,我可能会这样处理它:

-(void)keyDown:(NSEvent *)event
{
    unichar ch = [[event charactersIgnoringModifiers] characterAtIndex:0];

    if (ch == NSUpArrowFunctionKey && (event.modifierFlags & NSCommandKeyMask)) {
        // Scroll to top
        return;
    }
    else if (ch == NSDownArrowFunctionKey && (event.modifierFlags & NSCommandKeyMask)) {
        // Scroll to bottom
        return;
    }

    switch (ch) {
        case NSRightArrowFunctionKey:
            // Select the current row
            return;
        case ' ':
            // Scroll down one page
            return;
        default:
            break;
    }

    [super keyDown:event];
}
Run Code Online (Sandbox Code Playgroud)

但是,在Swift中,characterAtIndex:返回a unichar,while NSUpArrowFunctionKey: Int" ": String(或Character …

appkit swift

11
推荐指数
3
解决办法
9476
查看次数

如何从ALAssetRepresentation创建有效的CGImageSourceRef?

我正在尝试使用它CGImageSourceCreateThumbnailAtIndex来有效地创建一个调整大小的图像版本.我有一些现有的代码用磁盘上的图像来做这件事,现在我正在尝试使用来自的图像ALAssetsLibrary.

这是我的代码:

ALAsset *asset;
ALAssetRepresentation *representation = [asset defaultRepresentation];
CGImageRef imageRef = [representation fullResolutionImage];

CGDataProviderRef provider = CGImageGetDataProvider(imageRef);
CGImageSourceRef sourceRef = CGImageSourceCreateWithDataProvider(provider, NULL);

NSDictionary *resizeOptions = @{
  kCGImageSourceCreateThumbnailWithTransform : @YES,
  kCGImageSourceCreateThumbnailFromImageAlways : @YES,
  kCGImageSourceThumbnailMaxPixelSize : @(2100) 
};

CGImageRef resizedImage = CGImageSourceCreateThumbnailAtIndex(source, 0, resizeOptions);
Run Code Online (Sandbox Code Playgroud)

问题是它resizedImage是null,并CGImageSourceGetCount(sourceRef)返回0.但数据提供程序确实包含相当多的数据,并且数据看起来确实是有效的图像数据.在ALAsset来自一个iPhone 4S的摄像头卷.

我错过了什么?为什么要CGImageSourceCreateWithDataProvider()创建一个包含0张图像的图像源?

core-graphics alasset alassetslibrary

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

“动画层的时空”和“本地活动时间”是什么意思?

他们说:

计时协议提供了使用以下两个属性在动画持续时间一定秒数内启动动画的方法:beginTime 和 timeOffset。beginTime 指定动画应开始的持续时间的秒数,并缩放到动画层的时间空间。timeOffset 指定附加偏移量,但在本地活动时间中指定。两个值相结合来确定最终的起始偏移。

我了解时空。但我在这里很难理解他们的话。

“缩放到动画层的时空。”

可以说我有这个:

  • 动画师速度 = 1.0
  • 动画视图层的速度 = 2.0
  • 超级层的速度 = 2.0
  • 开始时间 = 1.0

那么0.25秒后就会实时开始?(双倍超级层速度,双倍子层速度,所以我们有四倍速度。动画师的本地速度是 1。所以仍然是四倍速度。)。

并且 timeOffset 被规定为“以本地活动时间”。他们的意思是被速度扭曲的时间?即,如果动画对象的速度属性为 1.0,这就是这里的本地活动时间?

当地的活跃时间对我来说确实意味着很多不同的事情。例如时钟时间,或者整个时空层次结构中的时间,它如何影响底部的时间。如果有人能在这里指出详细信息,那就太好了。

iphone cocoa-touch core-animation uikit timespace

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

从CGImageGetDataProvider返回的数据长度大于预期

我正在加载灰度png图像,我想访问基础像素数据.然而,在我通过CGImageGetDataProvider加载获取像素数据后,返回的数据长度超过预期.

CCGDataProviderRef provider = CGDataProviderCreateWithFilename(cStr);
CGImageRef image = CGImageCreateWithPNGDataProvider(provider, NULL, FALSE, kCGRenderingIntentDefault);

mapWidth = CGImageGetWidth(image);
mapHeight = CGImageGetHeight(image);

lookupMap = CGDataProviderCopyData(CGImageGetDataProvider(image));
Run Code Online (Sandbox Code Playgroud)

mapWidth出现在1804,mapHeight出现在1005.其产品是1813020

我打电话的时候

CFDataGetLength(lookupMap)
Run Code Online (Sandbox Code Playgroud)

回复是1833120.

这些额外的20100字节来自哪里?这里的任何帮助非常感谢.我错过了关于图像底层格式的一些内容吗?

在进一步检查CFDataRef时,我发现如果我遍历缓冲区,对于每一行字节:0到1803将从我的图像中正确,然后接下来的20个字节全部为零.所以这意味着我的返回图像实际上是以1824×1005图像而不是1804乘1005返回.仍然没有解释为什么.

iphone image cgimage iphone-sdk-3.0

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

如何检查c#中的数字是否可以被整除?

我需要知道如何做这个程序.

calculation1: 1/4 = 0,25
calculation2: 1/8 = 0,125
calculation3: 47/183 = 0,25683060109289617486338797814207......
calculation4: 58/889 = 0,06524184476940382452193475815523......
calculation5: 1/5 = 0,2
Run Code Online (Sandbox Code Playgroud)

计算1,2和5的结果将得到一个简短的结果,没有句号或无穷无尽的数字串.计算3和4的结果非常长且复杂.

如何检查哪个计算是"简单计算"并给出"短"结果.

我试过这个并且肯定给出了错误的结果......就像你看到的那样,计算结果double在我的应用程序中有数据类型.

static bool IsInt(double x)
    {
        try
        {
            int y = Int32.Parse(x.ToString());
            return true;
        }
        catch
        {
             return false;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我希望很清楚我在问什么.

c# math floating-point double division

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

使用substringFromIndex:与NSData

我正在处理一个NSData4840字节的对象,并且想要省略前20个字节并获取其余字节.子串方法substringFromIndex:/ substringToIndex:适用于NSData

cocoa-touch objective-c nsdata ios

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

子类化UIView或用UIView编写

我首先要说出我想做什么,因为我不确定我是否在问正确的问题.我正在制作一个基于网格的地图,我将保留一组对象来保持地图的状态和表示.每个对象都是一个Tile类.我应该是UIView或子类NSObject的子类,并且有一个UIView的ivar.我还计划在UIView中有一个UIImageView来加载代表地图位的图像.最后,我想从NIB加载视图.

我个人知道如何做这些事情但不确定最佳做法.有什么想法吗?

iphone objective-c interface-builder uiview

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

Django过滤器对相关模型有两个约束

我有一个django应用程序,模型如下:

  • 一个Question模型

  • 一个Answer模型,一个ForeignKey回到问题.(一个问题可以有多个答案.)

  • 一个Flag模型,带有一个ForeignKey答案.(答案可能被标记为不合适.)

以上所有内容都有一个user字段,用于定义创建该对象的用户.

我正在尝试获取所有问题的列表,其中包含当前用户已被标记的答案.我试过这个:

Question.objects.filter(answer__user=user).\
                 filter(answer__flag__isnull=False).distinct()
Run Code Online (Sandbox Code Playgroud)

...但我相信这将返回一个问题列表,其中包含当前用户的答案以及已被标记的答案,但不一定能保证它是已被标记的用户答案.

是否有捷径可寻?基本上,我想让answer过滤器的一部分在两者上引用相同的答案.

如果不清楚,请告诉我.

django

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