小编kyl*_*ejm的帖子

属性类型与访问者类型不匹配

使用Xcode 6 Beta 4,针对iOS 8:

我一起使用Core Data和Mogenerator.如果您不熟悉"Mogen",请跳至最底层.当Mogen为实体生成NSManagedObject子类时,它会执行以下操作:

@interface MyEntityID : NSManagedObjectID {}
@end

@interface _MyEntity : NSManagedObject {}

- (MyEntityID*)objectID;

----------------------------------------------------------------------------

@implementation _MyEntity

- (KJMWorkoutID*)objectID {
    return (KJMWorkoutID*)[super objectID];
}
Run Code Online (Sandbox Code Playgroud)

我觉得这很方便.NSManagedObject有一个objectID属性,所有_MyEntity正在做的是覆盖它的getter来返回一个MyEntityID,以便我们可以告诉它是一个专门用于我们的_MyEntityClass的ID.

所以,回到我的问题.我想通过检查它们不相等来比较两个MyEntityID:

if (![self.objectID isEqual:self.previousID])
Run Code Online (Sandbox Code Playgroud)

我收到这个警告:

Type of property 'objectID' does not match type of accessor 'objectID'

好的,我知道该属性是NSManagedObjectID,但我们正在调用Mogen编写的访问器方法,该方法返回MyEnytityID.即使代码完成也能识别这一点.

它如何仍然看到NSManagedObject的objectID的NSManagedObjectID属性类型?我应该以某种方式沉默警告吗?它可能只是一个Xcode 6 Beta的东西吗?(它不会发生在Xcode 5中)

什么是摩根:

Mogen只是一个有用的工具,可以为您的数据模型实体生成NSManagedObject的子类.它有点像Xcode所做的那样,但是不会删除你每次重新生成子类时编写的任何自定义代码,它会为你提供一大堆很好的方法来创建新的实体等.如果下栏有前缀类名字的东西你也有新的东西,它只是Mogen停止覆盖你写的任何自定义代码的方式.

xcode objective-c ios xcode6 ios8

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

SQLite.swift:实现表示给定表的行的模型类的最佳方法?

这是我刚才提出的问题(到目前为止),不需要太多/任何解释.

我解决了这个问题:

  • 每个类可能有initialiseTable()一种类似的函数,在初始化DB模式时会调用它?
  • 列的每个类中的静态常量 Expression<T>

我想我最关心的部分是用Query结果填充模型类的实例.

一如既往,感谢您的帮助:)

链接到令人敬畏的SQLite.swift给尚未遇到它的人.


更新(22/4/15 14:13):

在考虑之后,我不确定是否将行数据存储在iVars中,因为在保存和更新物流以及过度复杂的事情上可能会变得棘手.

但是,我仍然认为使用模型类来表示行是一个好主意.我认为使用表示表行的模型类的主要好处是安全性.例如,知道a Query有列name : Expression<String>.如果你开始Query在类之间传递实例,这很好

就像我说的那样,我不确定是否真的想开始创建一个类,每个列都有iVars来表示行.如果你这样做,你可以开始进入ORM土地,我觉得它带有简单的SQLite.swift之美.通过为每列保留iVars,我能想到的唯一好处是,您可以调用refresh()一个实例来检索数据库中的最新数据,然后指向此实例的所有其他对象将拥有最新数据而无需自己打了DB.

也许只是有一个子类Query的类,并有一个构造函数,它接受数据库并使用正确的表名初始化?也许这可能会以某种方式为行列提供getter.

我只是在这里大声思考试图给予一些思考的食物.这些想法非常不成熟和年轻,只是考虑到我可以采取的每种方法的局限和好处.当我改进想法时,会回来并添加/更改.


更新(24/4/15 09:45):

也许模型类应该只是数据库表的代理?每个类都有一个用于每个字段的setter,可以立即写入DB,这样状态就不会发生冲突,因为它总是反映DB中的内容.但是,您将无法轻松管理多久访问数据库的频率?但.你真的经常改变价值观吗?

sqlite ios swift sqlite.swift

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

如果Element符合给定协议,则扩展阵列以符合协议

我想做这样的事情,但无法正确使用语法或在网络上的任何地方找到正确的方法来编写它:

protocol JSONDecodeable {
    static func withJSON(json: NSDictionary) -> Self?
}

protocol JSONCollectionElement: JSONDecodeable {
    static var key: String { get }
}

extension Array: JSONDecodeable where Element: JSONCollectionElement {
    static func withJSON(json: NSDictionary) -> Array? {
        var array: [Element]?
        if let elementJSON = json[Element.key] as? [NSDictionary] {
            array = [Element]()
            for dict in elementJSON {
                if let element = Element.withJSON(dict) {
                    array?.append(element)
                }
            }
        }
        return array
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我只想在这个数组的元素符合时才符合Array我的协议.JSONDecodeableJSONCollectionElement

这可能吗?如果是这样,语法是什么?

protocols ios swift protocol-extension

8
推荐指数
2
解决办法
901
查看次数

Swift:将泛型类型转换为相同的泛型类型,但具有相关类型的子类

考虑这些类:

struct OrderedSet<T: Hashable> {}

class Exercise: Hashable {}

class StrengthExercise: Exercise {}

class CardioExercise: Exercise {}
Run Code Online (Sandbox Code Playgroud)

我想做以下事情:

var displayedExercises = OrderedSet<Exercise>() {
    didSet {
        self.tableView.reloadData()
    }
}
var cardioExercises = OrderedSet<CardioExercise>()
var strengthExercises = OrderedSet<StrengthExercise>()


@IBAction func segmentControlChanged(segmentControl: UISegmentedControl) {
    switch segmentControl.selectedSegmentIndex {
    case 0:     self.displayedExercises = self.strengthExercises
    case 1:     self.displayedExercises = self.cardioExercises
    default:    break
    }
}
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

Cannot assign value of type 'OrderedSet<StrengthExercise>' to type 'OrderedSet<Exercise>
Run Code Online (Sandbox Code Playgroud)

我不太明白这一点,因为它StrengthExercise是一个子类,Exercise并将拥有所需的一切OrderedSet<Exercise>.

问题

  • 为什么这个错误是必要的?
  • 如何写一些能实现我想要的功能的东西?



雷达提交
rdar:// …

generics macos inheritance ios swift

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

当UISearchController处于活动状态并选择了新选项卡时,UITableView将消失

对不起,如果标题不是那么清楚,总结一下就觉得很难.

使用Xcode 6 Beta 4,目标iOS 8:

我有一个UITabBarController,它的一个控制器是一个UITableViewController(TVC).这个TVC有一个searchController属性,它是新的UISearchController,它正在取代UISearchDisplayController.像这样初始化它(我会把它添加到我的故事板但是右下角的对象库中的searchController仍然是一个UISearchDisplayController - 我应该为此提交雷达吗?):

self.searchController = [[UISearchController alloc]initWithSearchResultsController:nil];
self.searchController.dimsBackgroundDuringPresentation = NO;
self.searchController.searchResultsUpdater = self;
self.searchController.delegate = self;
self.searchController.searchBar.frame = CGRectMake(0, 0, 320, 44);
self.tableView.tableHeaderView = self.searchController.searchBar;
Run Code Online (Sandbox Code Playgroud)

如果searchBar是第一响应者,那就明白了:

UISearchController处于活动状态,我即将在tabBar上选择另一个选项卡并返回

然后在tabBar上选择另一个选项卡,然后你回来:

tableView已经消失了

我不知道为什么会这样?或许UISearchController错误?或者是文档没有告诉我我应该做的事情(目前缺乏细节).

objective-c uitableview uisearchbar uitabbaritem ios8

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

每次我尝试在调试器控制台中打印时,Xcode 7都会崩溃

我四处搜寻,找不到任何相关内容.

使用Swift 2和Xcode版本7.0.1(7A1001).每次我在调试器控制台中执行某些操作时,Xcode都会崩溃.

该项目不是很大,并且只有不到10个第三方框架.

我想不出更多相关的信息,但我确信还有更多,所以请问我是否有任何我应该添加到我的问题中的任何内容.

我当然清理了构建和派生数据.

这让我疯了.谢谢!



更新16/11/12

提交的rdar:// 23559366.

xcode ios swift xcode7 swift2

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

Twitter应用程序 - 使用"承载令牌"进行身份验证

简短的问题:

我已经在apps.twitter.com为我的应用程序生成了访问令牌访问令牌密钥.我如何使用它们发送请求https://api.twitter.com/1.1/statuses/user_timeline.json

什么是承载令牌?它是访问令牌还是访问令牌秘密?或两者的编码?



一点背景:

我正在尝试制作一个应用程序,从我的Twitter时间线下载推文,而app用户不必通过他们的Twitter帐户进行身份验证.我知道我必须使用仅应用程序身份验证,并且文档(https://dev.twitter.com/docs/auth/application-only-auth)声明我需要使用Consumer KeyConsumer Secret来请求一个承载令牌.但是如果我已经使用generate按钮在apps.twitter.com上生成了令牌:


apps.twitter.com页面上我的应用程序的屏幕截图


我当然可以将这些硬编码到我的应用程序中并以某种方式将它们作为Bearer Token传递出来?像这样我期望:

#define kTwitterBearerToken @"123456"    

NSURL *twitterFeedURL = [NSURL URLWithString:@"https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=kylejm_&count=10"];
NSMutableURLRequest *URLRequest = [NSMutableURLRequest requestWithURL:twitterFeedURL];
[URLRequest setHTTPMethod:@"POST"];
[URLRequest setValue:[NSString stringWithFormat:@"Bearer %@", kTwitterBearerToken] forHTTPHeaderField:@"Authorization"];
NSURLResponse *URLResponse;
NSError *URLerror;
NSData *tweetData = [NSURLConnection sendSynchronousRequest:URLRequest returningResponse:&URLResponse error:&URLerror];
NSError *JSONError;
NSArray *tweets = [NSJSONSerialization JSONObjectWithData:tweetData options:0 error:&JSONError];
NSLog(@"%@", tweets);
Run Code Online (Sandbox Code Playgroud)


在此先感谢您的答案和帮助!

凯尔

PS我看过STTwitter,但是当我想要实现的东西如此简单时,认为使用它是有点不必要的(至少看起来简单地将预先生成的令牌传递给我)...

twitter objective-c ios twitter-oauth

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

POST 请求作为 Heroku 上的 GET 请求接收


为什么我的 PHP 脚本没有接收到由 Heroku 托管的另一个域上的 html 表单设置的 POST 参数?



语境:

我有一个简单的 html 表单,它将一些用户数据发送到我放在 Heroku 上的 PHP 脚本。该表单位于不同的站点/域上,但据我所知,同源策略不应中断请求。事实上,我已经测试过将请求从表单发送到我的本地机器,并且脚本运行良好。

请求从 html 表单正常正常触发,但是当它到达我的 PHP 脚本时,$_POST 数组是空的。检查 Heroku 日志后,实际上看起来我的脚本将 POST 请求作为 GET 接收。

是否有我没有做过的配置/路由事情(我是 Heroku 的新手)?

我查看了其他几个类似这样的问题/答案,但还没有解决方案对我有用。

非常感谢您的帮助



更新 1 (4/4/12)

正如 CoR 在他的回答中所描述的那样,POST 请求似乎正在被移动。我不知道如何阻止这种情况发生。通过研究,似乎只有当您不通过 h​​ttps 发出 POST 请求时才会发生这种移动。

现在我已经提交并将表单方法更改为 GET,这很好用。很高兴知道是否可以在不设置 SSL 的情况下在 Heroku 应用程序上启用 POST 请求。



更新 2 (6/4/12)

我刚刚用 Heroku 打开了一张票,以了解支持 POST 请求的唯一方法是否是启用 SSL。我当然在此处询问之前查看了他们的文档以寻求答案,但是没有描述与 CoR 回答时移动 POST 相关的任何内容。当他们回复我时,我会在此处发布 (...) 答案。

php post http heroku http-post

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