小编Ans*_*ala的帖子

iOS 4:背景音频的遥控器

我正在尝试为我正在为iOS 4开发的应用程序设置背景音频.该应用程序没有专用的音乐播放器viewController,但不像其他背景音频应用程序,如Pandora,这使任务更多一点混乱.

我已Info.plist正确设置了适当的设置,并AVAudioPlayer在我的应用委托中有一个对象,可以从任何地方访问.当用户播放一首歌曲时,我用一首AVAudioPlayer用歌曲初始化的新歌曲替换它并播放它.这一切都很好,除了现在我不知道如何支持远程控制事件.

根据Apple的文档,我有这个:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    [self becomeFirstResponder];
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [[UIApplication sharedApplication] endReceivingRemoteControlEvents];
    [self resignFirstResponder];
}

- (BOOL)canBecomeFirstResponder {
    return YES;
}

- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
    switch(event.subtype) {
        case UIEventSubtypeRemoteControlTogglePlayPause:
            if([iPhoneAppDelegate backgroundAudioPlayer].playing)
                [iPhoneAppDelegate pauseBackgroundAudioPlayer];
            else
                [iPhoneAppDelegate playBackgroundAudioPlayer];
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,我在哪里放这个?Apple的文档似乎暗示这应该放在某个视图控制器的某个地方,但我的应用程序有很多视图控制器和导航控制器.无论我试图把它放在哪里,出于某种原因,在多任务托盘遥控器中点击切换播放/暂停按钮会导致歌曲暂停片刻然后取消暂停,或以某种方式使歌曲播放两次.

iphone audio avfoundation ios4

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

Objective-C继承; 从超类调用重写方法?

我有一个Objective-C类,它有一个意图被覆盖的方法,它在不同的方法中使用.像这样的东西:

@interface BaseClass
- (id)overrideMe;
- (void)doAwesomeThings;
@end

@implementation BaseClass
- (id)overrideMe {
    [self doesNotRecognizeSelector:_cmd];
    return nil;
}
- (void)doAwesomeThings {
    id stuff = [self overrideMe];
    /* do stuff */
}
@end

@interface SubClass : BaseClass
@end

@implementation SubClass
- (id)overrideMe {
    /* Actually do things */
    return <something>;
}
@end
Run Code Online (Sandbox Code Playgroud)

然而,当我创建SubClass并尝试使用它,但它仍然呼吁overrideMeBaseClass,并且由于崩溃doesNotRecognizeSelector:.(我不是那样做[super overrideMe]或者像这样的任何蠢事).

有没有办法BaseClass打电话被覆盖overrideMe

oop inheritance objective-c

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

更改UITableView的contentInset而不更改其contentOffset?

我想在iPhone上创建类似于Apple的Messages应用程序的UI.我有一个表格视图和下面的文本字段.当我选择文本字段时,我会在键盘向上滑动时为表格视图的contentInset设置动画,以便内容显示在键盘上方.

我有一些代码使用平移手势识别器来检测用户何时向下滚动表格视图并在此情况下将键盘设置为动画(如果您看到Apple的消息应用程序,它具有相同的功能来关闭键盘.您向下滚动在表格视图上,当您的手指滑过文本字段时,键盘会随之下降).

这很好用,但如果表格视图滚动到顶部并且我在键盘向下滑动时开始更改其内容,则表格视图滚动到顶部,然后快速回到顶部,从而导致奇怪的生涩动画.我想这是因为如果表视图滚动到顶部,更改contentInset会将contentOffset重置为表视图的顶部,这会使其行为异常.

有谁知道如何更改滚动视图的contentInset而不更改其contentOffset?

iphone uitableview uiscrollview ios

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

如何在注入的HTML片段中防止CSS干扰?

我目前正在开发一个Safari扩展,它使用注入的脚本进一步将一些HTML注入当前网页,并注入一些其他脚本以使其工作.这一切都运行正常,但问题是注入的HTML会受到网页已导入的CSS样式表的影响.例如,HTML在Google.com上看起来很完美(它具有相对较少的CSS样式),但在StackOverflow.com(样式按钮等)上却很糟糕.

在显示此HTML时,jQuery被注入到网页中,所以我可以使用它.我已经尝试了各种各样的事情,包括遍历所有元素并呼吁removeClass()他们每个人都无济于事.我也尝试添加"CSS重置"类等,但似乎没有任何工作.

什么是阻止CSS干扰我的HTML的最佳方法?

html javascript css jquery

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

防止ARC解除分配当前没有使用但很快就会被淘汰的东西?

我遇到过这个问题几次,想知道正确的方法.

举个例子,假设我正在编写一个iPhone应用程序,我想要一个使用块的自定义警报视图类.

所以我写了这个类,然后在我的代码中我去了:

MyAlertView *alert = [MyAlertView alertWithBlahBlahBlah...];
[alert addButton:@"button" withBlock:^{ ... }];
[alert show];
Run Code Online (Sandbox Code Playgroud)

在警报视图类的某个地方,我们有

- (void)addButton:(NSString *)button withBlock:(void (^))block {
    [_blocks setObject:[block copy] forKey:button];
}

- (void)show {
    ... drawing stuff ...
    UIButton *button = ...
    [button addTarget:self selector:@selector(buttonPressed:) ...];
    ...
}

- (void)buttonPressed:(id)sender {
    ((void (^)())[_blocks objectForKey:[sender title]])();
}
Run Code Online (Sandbox Code Playgroud)

因此,警报视图现在显示就好了.问题是,如果我点击一个按钮,它会尝试将buttonPressed:选择器发送到MyAlertView显示的对象.在MyAlertView已,然而,从此时的上海华删除.ARC决定由于警报视图不再由任何人拥有,因此应该取消分配,而不知道按钮将来需要发送消息.点击按钮时会导致崩溃.

将警报视图保留在内存中的正确方法是什么?我可以使MyAlertView对象成为使用它的类的属性,但这有点愚蠢(如果我想一次显示两个警报怎么办?).

objective-c ios automatic-ref-counting

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

为什么不能同时分配和调用块?

以下代码编译:

^{}();
Run Code Online (Sandbox Code Playgroud)

这编译:

void (^x)();
(x = ^{})();
Run Code Online (Sandbox Code Playgroud)

但这不是:

(void (^x)() = ^{})();
Run Code Online (Sandbox Code Playgroud)

我得到的错误是Expected ')'.这是llvm或其他什么的错误吗?它完全阻止我假装Objective-C是JavaScript.

objective-c objective-c-blocks

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

OOP 设计问题 - 避免在类似的类中重复代码?

我正在用 PHP 为我们正在开发的网站的服务器端部分编写一堆类。这些类看起来像这样:

class SomeEntity {
    // These fields are often different in different classes
    private $field1 = 0, $field2 = 0, ... ;

    // All of the classes have one of these
    static function create($field1, $field2) {
        // Do database stuff in here...
    }

    // All of the classes have similar constructors too
    function __construct($id_number) {
        // Do more database stuff in here...
    }

    // Various functions specific to this class
    // Some functions in common with other classes …
Run Code Online (Sandbox Code Playgroud)

php oop design-patterns

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