小编nrj*_*nrj的帖子

如何将'A类'转换为其子类'B类' - Objective-C

我正在使用一个框架来定义和使用'ClassA',它是NSObject的子类.我想添加一些变量和功能,所以我自然创建了'ClassB','ClassA'的子类

现在我的问题是这个.这个框架中的许多方法返回'ClassA'的实例,我想将它转换为我的子类.

例如,采用这种方法:

- (ClassA *)doSomethingCool:(int)howCool
Run Code Online (Sandbox Code Playgroud)

现在在我的代码中我试试这个:

ClassB * objB;
objB = (ClassB *)doSomethingCool(10); 

NSLog(@"objB className = %@", [objB className]);
Run Code Online (Sandbox Code Playgroud)

这运行得很好.没有编译或运行时错误或任何东西.但对我来说真正奇怪的是输出:

>> "objB className = ClassA"
Run Code Online (Sandbox Code Playgroud)

铸造显然失败了.不知道此时发生了什么... objB被输入为'ClassB',但它的className是'ClassA',它不会响应任何'ClassB'方法.

不确定这是怎么可能的......任何人都知道我在做错了什么?

我发现了一个类似的帖子,与我在这里提出的要求完全相反

inheritance casting objective-c subclassing

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

CoreGraphics - 仅混合视图的*部分*

我最近发现了一篇关于使用UITableViewCells提高滚动性能的精彩文章:http://engineering.twitter.com/2012/02/simple-strategies-for-smooth-animation.html - 虽然可以找到很多很棒的技巧文章,有一个特别令我好奇的:

Twitter for iPhone 4.0中的推文在微妙的纹理背景上有一个投影.这提出了一个挑战,因为混合是昂贵的.我们通过从单元格的内容区域中分割阴影区域来减少Core Animation必须考虑的非透明区域来解决这个问题.

使用iOS模拟器,单击调试 - 颜色混合图层将显示如下内容:

TwitterTableViewCell

标记为红色的区域是混合的,绿色区域是不透明的.大.文章没有提到的是:我该如何实现?我的理解是UIView要么是不透明的,要么不是.在我看来,实现这一目标的唯一方法是使用子视图,但文章明确指出这是一个天真的实现:

相反,我们的推文单元格包含一个没有子视图的视图; 一个drawRect:绘制一切.

那么我该如何划分不透明的东西,以及我的单个drawRect:方法中没有的东西呢?

core-graphics uitableview ios

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

在Cocoa应用程序中定义和执行简单的AppleScript命令

我正在尝试为我编写的Cocoa应用程序添加一些脚本功能.我为我的项目创建了一个sdef(脚本定义文件).到目前为止,我已经成功地使用AppleScript访问对象子元素(元素),但我不能在生活中找出如何调用方法(命令).

这是我的sdef文件.

<suite name="mySuite" code="mSUI" description="My Application Suite">
    <class name="application" code="capp" description="Top level scripting object.">
        <cocoa class="NSApplication"/>
        <!-- I can access these elements fine -->
        <element description="Test children." type="child" access="r">
            <cocoa key="myChildren"/>
        </element>
        <!-- Cannot seem to call this method :( -->
        <responds-to command="testmethod">
            <cocoa method="exposedMethod:"/>
        </responds-to>
    </class>
    <class name="child" code="cHIL" description="A Child." plural="children">
        <cocoa class="Child"/>
        <property name="name" code="pnam" description="The child name." type="text" access="r">
            <cocoa key="name"/>
        </property>
    </class>
    <command name="testmethod" code="tEST" description="Execute the test method" />
</suite>
Run Code Online (Sandbox Code Playgroud)

这是我的控制器类实现(这是我的应用程序的委托) …

cocoa applescript objective-c

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

jQuery:更改ONE表格单元格的边框颜色

我在这里有一个简单的HTML选项表:

<table>
  <tr>
    <td>blue</td>
    <td>green</td>
  </tr>
  <tr>
    <td>red</td>
    <td>cream</td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

具有相关样式的CSS:

td { background-color: #FFF; border: 1px solid #3F3F3F; cursor: pointer; }
td.selected { color: #D93A2C; border: 1px solid #D93A2C; }
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

HTML表格

当我点击其中一个表格单元格时,我希望边框和文本为红色.所以我使用jQuery使用以下代码切换'.selected'类.

$('td').each(function(){
    $(this).click(function(){
        $(this).toggleClass('selected');
    });
});
Run Code Online (Sandbox Code Playgroud)

但结果如下: 已选择HTML表格单元格

第一个表格单元格(蓝色)是唯一一个在选中时看起来像我想要的单元格.我需要突出显示所选单元格的所有边框.

关于如何实现这一点的任何想法?如果有人能提出更好的方法,我不反对放弃赌桌.

html javascript css jquery

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

iOS:推送通知,UIApplicationStateInactive和快速应用切换

根据苹果的文档,以找出是否一个用户轻敲你的推送通知你应该检查applicationStateapplication:didReceiveRemoteNotification:

如果值为UIApplicationStateInactive,则用户点击操作按钮; 如果值为UIApplicationStateActive,则应用程序在收到通知时位于最前端.

我发现这并非总是如此.例如:

双击主页按钮以显示系统托盘并进入"快速应用程序切换模式",您的应用程序向上滑动以显示其他正在运行的应用程序,您的应用程序将进入非活动状态(即使它仍然可以看到mostyle).如果您在此模式下收到推送通知,您的应用代表仍会收到,application:didReceiveRemoteNotification:并且此时您的applicationState是UIApplicationStateActive.根据文档,您应该像用户点击警报一样对待它...但在这种情况下他们没有.不仅如此,用户甚至没有看到推送通知(可能是因为在此模式下应用程序的顶部被切断).

有没有人知道检测处于"快速应用切换模式"或正确处理通知的方法?

push-notification uiapplicationdelegate ios

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

向Gmail发送POP3命令会返回旧邮件

我试图向Gmail发出简单的POP3命令,如下所示:

openssl s_client -connect pop.gmail.com:995
+OK Gpop ready for requests from XX.XX.XX.XX
USER my-email@gmail.com
+OK send PASS
PASS mypassword
+OK Welcome.
Run Code Online (Sandbox Code Playgroud)

连接和身份验证都可以.但是,当我发出STAT或LIST命令时,我收到以下内容:

STAT
+OK 345 20351669
Run Code Online (Sandbox Code Playgroud)

这表明我的收件箱中有345封邮件.实际上我有180,只有少数未读.这个号码不能引用我的所有电子邮件......我已经拥有这个帐户5年了,肯定有超过345的WAY.所以,我开始RETR一些消息.最新的一个(#345)是从2007年1月开始的,最老的一个(#1)是从2006年末开始的.在写这篇文章的过程中,我收到了一些新的电子邮件,但即使在重新连接并发布新的LIST命令之后,345号码不会改变.

我不是电子邮件/流行专家,但我真的很难过......在Gmail设置中,"所有消息"都启用了POP3.我甚至尝试用另一个Gmail帐户做同样的事情,我得到完全相同的结果; 一个非常低的消息数和真正的旧消息.

有任何想法吗?

gmail command-line pop3 telnet

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

在 setNeedsLayout:YES 后未调用 NSView 布局方法

从 OSX 10.7 开始,如果您希望执行 NSView 的手动布局,您应该通过覆盖该layout方法来实现,并且每当您希望安排对该方法的调用时,您只需执行以下操作:

[myView setNeedsLayout:YES] 
Run Code Online (Sandbox Code Playgroud)

我对 iOS 中的这种模式非常熟悉,但是在 OSX 上它似乎不起作用。我创建了一个自定义 NSView 并实现了layout它,但它似乎永远不会被调用。曾经。不是在添加子视图之后,不是在调用之后setNeedsLayout:YES,永远不是,我不知道为什么。我可以手动打电话layout,事情按预期工作,但文档说永远不要这样做。

从Xcode:

- (void)layout
Override this method if your custom view needs to perform custom
layout not expressible using the constraint-based layout system. In
this case you are responsible for calling setNeedsLayout: when
something that impacts your custom layout changes.
Run Code Online (Sandbox Code Playgroud)

来自在线文档:

仅当您想要进行自定义布局时才应该覆盖布局。如果你这样做,那么你还需要调用 setNeedsLayout: 当输入到你的自定义布局的东西发生变化时。

链接:http : //developer.apple.com/library/mac/#releasenotes/UserExperience/RNAutomaticLayout/#//apple_ref/doc/uid/TP40010631-CH1-SW14

任何帮助深表感谢。

更新: 这是一个示例 Xcode 项目的链接,该项目说明了LayoutTest.zip问题

layout cocoa objective-c nsview

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

RealmSwift @ObservedResults 具有父模型和子模型,无法在写入事务之外修改托管 RLMArray

我正在尝试在 SwiftUI 列表中显示一些简单的 Realm 对象。每个对象还有相关的子对象。

我可以通过使用@ObservedResults(Parent.self)属性包装器来很好地显示父对象。只需向 Realm 添加或删除父对象即可更新列表,这非常有效。

当我想显示相关的子模型时,就会出现问题。当我尝试以与添加父模型相同的方式在 Realm 中添加子模型时,也使用默认的 Realm.Configuration,我得到RLMException一句话Cannot modify managed RLMArray outside of a write transaction.

这是一个简单的 SwiftUI 视图,说明了该问题。

struct ContentView: View {    
    
    @ObservedResults(Parent.self) var parents
    
    var body: some View {
        VStack(spacing: 15) {
            Button("Create parents") {
                let realm = try! Realm()
                try! realm.write {
                    realm.add(Parent(id: 1, name: "Nick"), update: .all)
                    realm.add(Parent(id: 2, name: "Lucas"), update: .all)
                    realm.add(Parent(id: 3, name: "Ryan"), update: .all)
                }
            }
            Button("Create child") {
                guard let parent …
Run Code Online (Sandbox Code Playgroud)

realm swift swiftui

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

RoR:如何使用特定字体创建动态文本图像

我正在寻找的是一些示例代码,最好是Ruby on Rails,关于如何动态创建包含特定字体文本的图像.

基本上我想创建一个这样的URL:

/api/text_as_image?font=futura&text=foo
Run Code Online (Sandbox Code Playgroud)

并让它返回包含字体"futura"中文本"foo"的图像.我知道这可以用ImageMagick来完成,似乎无法弄明白.任何帮助表示赞赏.

ruby-on-rails imagemagick

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

Cocoa:NSApp beginSheet设置应用程序委托?

我试图在我的应用程序中显示自定义工作表,但我认为我做错了什么.虽然一切似乎都很好,但我有一个相当奇怪的副作用.(花了几个小时才算出来).事实证明,每当我在我的应用程序中显示一个工作表时,Application委托就会被设置为工作表的实例,因此我的Controller将被取消设置为委托导致各种问题.

我创建了一个名为FailureSheet.xib的NIB文件.我在IB中布置了我的接口,然后创建了一个名为'FailureSheet.m'的'NSWindowController'的子类,我将其设置为File的Owner.这是我的FailureSheet类:

#import "FailureSheet.h"

@implementation FailureSheet  // extends NSWindowController

- (id)init
{
    if (self = [super initWithWindowNibName:@"FailureSheet" owner:self])
    {

    }
    return self;
}

- (void)dealloc
{
    [super dealloc];
}

- (IBAction)closeSheetTryAgain:(id)sender
{   
    [NSApp endSheet:[self window] returnCode:1];
    [[self window] orderOut:nil];
}

- (IBAction)closeSheetCancel:(id)sender
{
    [NSApp endSheet:[self window] returnCode:0];
    [[self window] orderOut:nil];
}

- (IBAction)closeSheetCancelAll:(id)sender
{
    [NSApp endSheet:[self window] returnCode:-1];
    [[self window] orderOut:nil];
}

@end
Run Code Online (Sandbox Code Playgroud)

这里没有什么复杂的事情发生.现在这就是我在'Controller'类中显示FailureSheet的方法:

sheet = [[FailureSheet alloc] init];

[NSApp beginSheet:[sheet window]
   modalForWindow:window
    modalDelegate:self
   didEndSelector:@selector(failureSheetDidEnd:etc:etc:)
      contextInfo:nil]; …
Run Code Online (Sandbox Code Playgroud)

cocoa delegates nsapplication cocoa-sheet

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