小编the*_*tic的帖子

在ARC中总是将自我的弱引用传递给阻塞?

我对Objective-C中的块使用有点困惑.我目前使用ARC,我的应用程序中有很多块,目前总是指代self而不是弱引用.这可能是这些区块保留self并防止被解除分配的原因吗?问题是,我应该总是使用块中的weak引用self吗?

-(void)handleNewerData:(NSArray *)arr
{
    ProcessOperation *operation =
    [[ProcessOperation alloc] initWithDataToProcess:arr
                                         completion:^(NSMutableArray *rows) {
        dispatch_async(dispatch_get_main_queue(), ^{
            [self updateFeed:arr rows:rows];
        });
    }];
    [dataProcessQueue addOperation:operation];
}
Run Code Online (Sandbox Code Playgroud)

ProcessOperation.h

@interface ProcessOperation : NSOperation
{
    NSMutableArray *dataArr;
    NSMutableArray *rowHeightsArr;
    void (^callback)(NSMutableArray *rows);
}
Run Code Online (Sandbox Code Playgroud)

ProcessOperation.m

-(id)initWithDataToProcess:(NSArray *)data completion:(void (^)(NSMutableArray *rows))cb{

    if(self =[super init]){
        dataArr = [NSMutableArray arrayWithArray:data];
        rowHeightsArr = [NSMutableArray new];
        callback = cb;
    }
    return self;
}

- (void)main {
    @autoreleasepool {
        ...
        callback(rowHeightsArr);
    }
}
Run Code Online (Sandbox Code Playgroud)

iphone weak-references objective-c ios automatic-ref-counting

249
推荐指数
4
解决办法
10万
查看次数

委托:Angular中的EventEmitter或Observable

我试图在Angular中实现类似委托模式的东西.当用户点击a时nav-item,我想调用一个函数然后发出一个事件,而该事件又由一些其他组件监听事件来处理.

这是场景:我有一个Navigation组件:

import {Component, Output, EventEmitter} from 'angular2/core';

@Component({
    // other properties left out for brevity
    events : ['navchange'], 
    template:`
      <div class="nav-item" (click)="selectedNavItem(1)"></div>
    `
})

export class Navigation {

    @Output() navchange: EventEmitter<number> = new EventEmitter();

    selectedNavItem(item: number) {
        console.log('selected nav item ' + item);
        this.navchange.emit(item)
    }

}
Run Code Online (Sandbox Code Playgroud)

这是观察组件:

export class ObservingComponent {

  // How do I observe the event ? 
  // <----------Observe/Register Event ?-------->

  public selectedNavItem(item: number) {
    console.log('item index changed!');
  }

}
Run Code Online (Sandbox Code Playgroud)

关键问题是,如何让观察组件观察相关事件?

event-delegation observable observer-pattern eventemitter angular

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

如何从Swift中的Dictionary中获取特定索引处的键?

我有一个Dictionary在Swift中,我想获得一个特定索引的密钥.

var myDict : Dictionary<String,MyClass> = Dictionary<String,MyClass>()
Run Code Online (Sandbox Code Playgroud)

我知道我可以遍历密钥并记录它们

for key in myDict.keys{

    NSLog("key = \(key)")

}
Run Code Online (Sandbox Code Playgroud)

然而,奇怪的是,这样的事情是不可能的

var key : String = myDict.keys[0]
Run Code Online (Sandbox Code Playgroud)

为什么?

dictionary ios swift

103
推荐指数
7
解决办法
13万
查看次数

清理Angular2中的输入

我试图从我的数据库中获取第三方(可能不安全)的html内容并将其插入到我的html文档中.

我如何安全地做到这一点(针对XSS的保护)?

Angular1.x中曾经有过$sce消毒输入,我如何在Angular2中做到这一点?据我了解,Angular2默认自动清理它,这是正确的吗?

这样的东西不起作用:

<div class="foo">
    {{someBoundValueWithSafeHTML}} // I want HTML from db here
</div>
Run Code Online (Sandbox Code Playgroud)

sanitize typescript angular

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

了解iOS中的收据验证和收据刷新

我们完全了解iOS中的收据验证流程.

以下是我们目前的工作(开发中):

applicationDidFinishLaunchingapplicationWillEnterForeground我们确认在服务器端的收据,如果没有收据或收据是无效的,我们尝试刷新收据和重新验证.

以下是一些问题/问题:

  1. 什么情况下设备上没有可用的收据?

  2. 我们是否应该在没有收据时发出收据刷新请求?

  3. 为什么这个警报框有时会在启动时显示?我明白这是在收据刷新请求上显示的吗?

需要登录?

  1. 收据验证何时发生?我们目前只是在购买时验证购买,这是正确的用法吗?

ios receipt-validation

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

iOS沙箱/测试帐户一直要求在应用退出后登录

我们正在尝试使用StoreKit实现简单的应用程序内购买(不确定它是否与它有关)并且到目前为止一切顺利,但是我们面临一个特定问题:当我们退出应用程序时,iOS会永久询问我们登录:


在此输入图像描述


只有在使用沙箱或TestFlight帐户登录时才会发生这种情况,但这非常令人讨厌.这背后有什么理由或我们不应该担心吗?我读过许多人面临类似的问题,并且一旦应用程序投入生产就会解决,但这似乎是一种处理它的hacky /不可预测的方式.

如果您需要,我准备提供更多信息.在这一点上,我只是不知道为什么会发生这种情况(我已将它与许多事情联系起来,但它们都没有真正证明是正确的......例如收据验证请求,付款队列中未完成的交易等. ).

storekit ios skpaymenttransaction

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

具有依赖性的CocoaPods框架 - 包括框架模块内的非模块化头

我正在尝试构建一个包含其他pod依赖项的私有CocoaPods框架.

其中,我在podspec文件中添加了Parse作为依赖项:

s.dependency 'Parse'
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试去皮时,

pod lib lint MyPrivateSpec.podspec  --verbose --sources 'git@bitbucket.org:MY_BITBUCKET_NAME/specs.git,https://github.com/CocoaPods/Specs'
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

目标支持文件/ Parse/Parse-umbrella.h:3:9:注意:目标支持文件/ Parse/Parse-umbrella.h中包含的文件:3:

错误| xcodebuild:Parse/Parse/Parse.h:12:9:错误:在框架模块'Parse.Parse'中包含非模块头

[以下几行中有更多这类错误......]

我几乎查看了所有关于SO和github问题的相关问题,但我找不到任何对我有用的东西.有没有人遇到过这些问题,或者熟悉为什么这不起作用?

frameworks cocoapods swift

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

检测UIScrollView上的触摸位置?

我想在用户开始拖动时检测UIScrollView中的(初始)触摸位置.我已经搜索了这个问题,很多人似乎都在努力解决这个问题.现在,虽然我仍然不能理解为什么Apple不允许用户在滚动视图中访问触摸信息,但我不禁自己找到了解决方案.但是我的所有尝试都失败了,所以我想问你.

这是我认为会起作用的:

我在我的UIScrollView子类中设置了这样的UIPanGestureRecognizer,并将其添加到其手势识别器中:

UIPanGestureRecognizer *tapDrag = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(touchedAndDragged:)];
tapDrag.cancelsTouchesInView = NO;
tapDrag.delegate = self;
[self addGestureRecognizer:tapDrag];  
Run Code Online (Sandbox Code Playgroud)

和相应的方法:

-(void)touchedAndDragged:(UIPanGestureRecognizer*)t{

     CGPoint loc = [t locationInView:self];
     //do something with location (that is exactly what I need)
     //...

     //Now DISABLE and forward touches to scroll view, so that it scrolls normally
     t.enabled = NO;
     /****
     ?????
     *****/

}
Run Code Online (Sandbox Code Playgroud)

如评论所示,我想在获得该点之后禁用平移手势,然后禁用识别器(同时仍然拖动!)并将触摸"传递"到我的滚动视图,以便用户可以正常滚动.那可行吗?还有其他解决方案吗?

touch uiscrollview uiresponder uigesturerecognizer ios

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

在Swift中覆盖子类中的属性的正确方法是什么?

我也偶然发现了这个问题,但没有明确的答案

使用didSet观察者给出覆盖属性的"不明确使用'propertyName'"错误

问题:我想覆盖子类中的属性.

让我用一个例子说明问题:

我有一个叫做的类A和一个叫它的子类B.

A级

class A {

    var someStoredProperty : Int? 

}
Run Code Online (Sandbox Code Playgroud)

B级

class B : A{

    override var someStoredProperty : Int?{

        willSet{

            //add to superclass's setter 
            someStoredProperty = newValue! + 10
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

一旦我尝试设置继承属性 B

var b = B()
b.someStoredValue = 10 // Ambiguous use of someStoredProperty
Run Code Online (Sandbox Code Playgroud)

编译告诉我

Ambiguous use of someStoredProperty

这是为什么 ?

更新

class TableViewRow{

    typealias ClickAction = (tableView:UITableView, indexPath:NSIndexPath) -> Void
    var clickAction : ClickAction?
}

class SwitchTableViewRow: …
Run Code Online (Sandbox Code Playgroud)

inheritance overriding properties ios swift

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

如何在rails API中有效地使用Devise和Doorkeeper?

我很难理解流行的Doorkeeper和Devise宝石的责任和能力.我在授权和身份验证方面没有太多经验,所以如果我误解了这些方面的某些方面,请原谅我.我努力尝试,如果我做了什么,我想以正确的方式做,所以这是我目前的情况:

我想构建一个仅限API的rails应用程序,负责在用户注册和使用该服务时对其进行身份验证和授权.我精心挑选了两款颇受欢迎的宝石,名为Doorkeeper(授权)和Devise(身份验证).

我现在已经有了这个结构并且它可以工作,但是,我有完全落后于这些宝石的责任的问题.据我了解,Devise gem用作身份验证层,这意味着可以识别并登录用户(下面将讨论其他功能).另一方面,门卫将确保资源只能由获得授权的成员访问.我选择了Doorkeeper进行OAuth2集成,因为我的服务器需要能够在将来向潜在的第三方提供API访问权限.

我的问题首先是我对这些宝石的假设是否正确.

这是当前的身份验证/授权流程:

问题:用户注册,如果我的API没有Devise提供的预配置视图,我如何利用Devise发送确认电子邮件?(附注:可恢复,可记住,可追踪和可确认的特征在用户模型/迁移中.)

同样,我很想知道如何实现潜在的密码重置.请注意,只要它们适用于我的用例,对示例的引用就足够了.

我知道Devise提供了这些功能,但是如果不按照预先配置的(视图?)路线就很难弄清楚如何做到这一点.

例如,当用户注册时,他点击我自己user_controller的创建方法,基本上只是创建一个新用户,应该自动发送确认电子邮件(如果我们假设我的邮件配置是正确的)?

我不完全确定避免预先配置的路线是否有意义,这就是为什么我想听听更多有经验的人,如果我的想法是正确的,或者我是完全关闭的话,他们过去曾经使用过那些宝石这个.

authentication authorization ruby-on-rails devise doorkeeper

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