小编eri*_*ice的帖子

Objective-C中的NULL与nil

observeValueForKeyPath:ofObject:change:context:- 为什么文档使用NULL而不是nil在不指定上下文指针时?

null cocoa objective-c

180
推荐指数
4
解决办法
9万
查看次数

如果子类引用超类ivar,则合成不相关的属性将失败

编辑:我刚刚注意到这个其他Stack Overflow问题提出了同样的问题:为什么子类@property没有相应的ivar隐藏超类ivars?

这是一些有趣的行为,我无法在官方或非官方(博客,推文,SO问题等)中找到任何记录.我把它归结为它的本质,并在一个新的Xcode项目中进行了测试,但我无法解释它.

MyBaseClass有一个实例变量:

@interface MyBaseClass : NSObject {
    NSObject *fooInstanceVar;
}
@end
Run Code Online (Sandbox Code Playgroud)

MySubclass扩展了MyBaseClass,并声明了一个完全不相关的属性(也就是说,该属性不是由实例变量支持):

#import "MyBaseClass.h"
@interface MySubclass : MyBaseClass { }
@property (nonatomic, retain) NSObject *barProperty;
@end
Run Code Online (Sandbox Code Playgroud)

如果MySubclass的实现没有合成属性但实现了访问器方法,一切都很好(没有编译器错误):

#import "MySubclass.h"
@implementation MySubclass

- (NSObject*)barProperty {
    return [[NSObject alloc] init]; // pls ignore flagrant violation of memory rules.
}

- (void)setBarProperty:(NSObject *)obj { /* no-op */ }

- (void)doSomethingWithProperty {
    NSArray *array = [NSArray arrayWithObjects:self.barProperty, fooInstanceVar, nil];
    NSLog(@"%@", array);
}
@end
Run Code Online (Sandbox Code Playgroud)

但是,如果我删除属性访问器方法并将其替换synthesize为属性的声明,我会收到编译器错误:'fooInstanceVar' undeclared …

gcc properties objective-c llvm ios

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

如何使用RxSwift使用dataSource和委托方法

我正在尝试将UIPickerView与RxSwift一起使用.有没有办法包装UIPickerView数据源和委托方法与Observables一起使用?我正在尝试做类似的事情

dataSequence
    .bindTo(pickerView.rx_itemsWithDataSource(dataSource))
Run Code Online (Sandbox Code Playgroud)

我看到有一个UITableview的预制库 https://github.com/RxSwiftCommunity/RxDataSources,但我想知道是否有一种简单的方法可以将其用于需要使用RxSwift的dataSource和委托的其他内容.

reactive-programming ios swift rx-swift

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

自定义视图应如何更新模型对象?

这是一个可可n00b问题-我已经在其他环境中对GUI应用程序进行了多年编程,但是现在我想了解在以下琐碎情况下什么是“惯用可可”:

我有一个简单的自定义NSView,允许用户在其中绘制简单的形状。它的drawRect实现是这样的:

- (void)drawRect:(NSRect)rect
{
    // Draw a white background.
    [[NSColor whiteColor] set];
    NSRect bounds = [self bounds];
    [NSBezierPath fillRect:bounds];

    [[NSColor blackColor] set];

    // 'shapes' is a NSMutableArray instance variable
    // whose elements are NSValues, each wrapping an NSRect.
    for (NSValue *value in shapes)
    {
        NSRect someRect;
        [value getValue:&someRect];
        [self drawShapeForRect:someRect];
    }

    // In addition to drawing the shapes in the 'shapes'
    // array, we draw the shape based on the user's
    // current drag interaction. …
Run Code Online (Sandbox Code Playgroud)

architecture cocoa idioms

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

构建应用程序以将ViewModel与ReactiveCocoa一起使用

我开始使用ReactiveCocoa.简单的事情是有道理的,但我还不能做复杂性.;)

这就是我想要建模的:我有一个视图控制器,它显示从HTTP端点请求的一些数据.HTTP端点使用类似浏览器的基本身份验证和cookie.

所以,我想发出那个HTTP请求.如果成功,那么,显示数据.如果它失败了401,我需要告诉视图弹出一个模态对话框,询问用户名/密码,然后重试HTTP请求.

在我的ViewModel中,那么,我有两个信号吗?一个返回内容,另一个告诉视图层我需要凭据?如何将凭据返回到HTTP请求发生的位置?

mvvm ios reactive-cocoa

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

为什么在没有实现的情况下在类别中声明方法?

我正在阅读一个开源项目的源代码,我在实现文件中遇到了以下类别定义:

@interface QCView (Private)
- (void)_pause;
- (void)setClearsBackground:(BOOL)flag;
@end
Run Code Online (Sandbox Code Playgroud)

起初我以为该setClearsBackground方法被添加QCView类定义中.但是当我搜索这个实现文件时,我发现没有一个setClearsBackground方法的实现(虽然这个消息被发送到QCView文件中的几个地方的实例).

为什么有人会在框架类上声明一个方法,QCView但是却没有在任何地方实现该方法?我唯一的猜测是,这是绕过编译器并调用未在QCView.h文件中声明的方法的一种方法.但这似乎不太可能,因为开发人员如何知道这种方法的实现甚至存在?

cocoa objective-c

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