小编Hai*_*ezu的帖子

如何从AFNetworking中的POST请求中读取一个简单的字符串(No JSON)

我正在使用AFNetworkingPOST通过POST与服务器通信,它使用包含我需要的信息的简单字符串进行响应.我正在使用以下代码:

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST: MY_URL
   parameters: MY_PARAMETERS
      success:^(AFHTTPRequestOperation *operation, id responseObject) {
        //do something
      }
      failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        //etc.
      }];
Run Code Online (Sandbox Code Playgroud)

但是,似乎AFNetworking期望每个响应都是JSON格式,因为我在执行请求时遇到此错误:

Error Domain = NSCocoaErrorDomain Code = 3840"操作无法完成.(Cocoa error 3840.)"(JSON文本不是以数组或对象开头,而是选项允许未设置片段.)UserInfo = 0x1566eb00 {NSDebugDescription = JSON text没有从数组或对象和选项开始,以允许未设置片段.}

我如何判断AFNetworking响应不是JSON对象?我已经看到了涉及的东西AFHTTPClient,但它似乎AFNetworking不再是其中的一部分了.

post objective-c ios afnetworking

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

在UINavigationBar中垂直居中的元素,具有自定义高度

我正在开发一个iOS 6和7应用程序,要求导航栏比我搜索的高和低通常的44/64点更高,到目前为止,似乎最干净的解决方案是使用类别(或子类)和实现该- (CGSize)sizeThatFits:(CGSize)size方法以返回不同的大小.

这样做只会很好,但这样做会导致里面的所有项目都停留在导航栏的底部,而我想让它们居中.我尝试使用Appearance Proxy协议来定义按钮的垂直偏移,特别是此代码

[[UIBarButtonItem appearance] setBackgroundVerticalPositionAdjustment: -10    forBarMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setBackButtonBackgroundVerticalPositionAdjustment: -10 forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setTitleVerticalPositionAdjustment: -10 forBarMetrics: UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)

在iOS 6上工作得很好,产生了这个结果

iOS 6

但是在iOS 7上不起作用,而是给我这个.

IOS 7

我已经读过iOS 7下的调整仅在使用自定义视图时才有效,但对我来说这似乎很奇怪,特别是考虑到setBackButtonTitlePositionAdjustment:forBarMetrics:实际上移动后退按钮的文本,而不是雪佛龙和标题实际上轻推.

我也尝试过一个子类化路由,使用layoutSubviews向下移动UINavigationBar中的视图.这很有效,但当按下新的视图控制器时,按钮会在过渡期间跳转.

我错过了什么吗?提前致谢

更新我已经编辑了描述,以便更清楚我的问题是关于栏内的内容,而不是栏本身.

iphone uinavigationbar uibarbuttonitem ios ios7

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

允许MPMoviePlayerViewController在横向播放,同时保留呈现视图控制器的方向

我有一个MPMoviePlayerViewController(一个子类,而不是XCDYouTubeVideoPlayerViewController),我正在使用以下代码

LPVideo *video = [_videos objectAtIndex: indexPath.row];
XCDYouTubeVideoPlayerViewController *videoPlayerViewController = [[XCDYouTubeVideoPlayerViewController alloc] initWithVideoIdentifier: video.code];
[self presentMoviePlayerViewControllerAnimated:videoPlayerViewController];
Run Code Online (Sandbox Code Playgroud)

我的问题是,当整个应用程序被锁定在纵向模式时,我仍然希望用户在横向播放视频,所以我把它放在我的AppDelegate中

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
if ([[self.window.rootViewController presentedViewController] isKindOfClass:[MPMoviePlayerViewController class]])
{
    return UIInterfaceOrientationMaskAllButUpsideDown;
}
else
{
    return UIInterfaceOrientationMaskPortrait;
}
}
Run Code Online (Sandbox Code Playgroud)

这可以很好地允许用户以纵向观看视频; 然而,如果视频播放器在纵向模式下被解除,那么呈现的视图控制器也会切换到肖像,这是我不希望发生的事情.

我已经尝试了各种各样的东西,比如实现supportedInterfaceOrientationsshouldAutorotate在我的主UINavigationController中,但它甚至不能阻止横向.

我知道这是可能的,因为我看过应用程序这样做,但我无法弄清楚如何.我已经看到了一些涉及倾听方向变化并将变换应用到玩家视图的解决方案,但它似乎不必要地复杂化.

我还尝试在返回时"强制"旋转viewWillAppear:animated但是在调用代码时它没有帮助.

我试过这两个

UIWindow *window = [[UIApplication sharedApplication] keyWindow];
UIView *view = [window.subviews objectAtIndex:0];
[view removeFromSuperview];
[window addSubview:view];
Run Code Online (Sandbox Code Playgroud)

还有这个

[UIViewController attemptRotationToDeviceOrientation];

两者都没有成就.

iphone objective-c orientation uiviewcontroller ios

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

NSCalendar.dateFromComponents返回错误的时间

我正在尝试在我的应用程序的用户默认值中存储和检索特定时间(因为它的重复事件日期没有相关性而被忽略),但我有这个奇怪的问题,其中小时是正确的但是分钟和秒不是

这是我的代码

var calendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)
var flags: NSCalendarUnit = .MinuteCalendarUnit | .HourCalendarUnit | .SecondCalendarUnit
var components = calendar?.components(flags, fromDate: NSUserDefaults.standardUserDefaults().valueForKey("breakfastTime") as NSDate!)
let test = calendar?.dateFromComponents(components!) as NSDate!
NSLog("Components: %@", components!)
NSLog("Date 1: %@", NSUserDefaults.standardUserDefaults().valueForKey("breakfastTime") as NSDate)
NSLog("Date 3: %@", test!)
Run Code Online (Sandbox Code Playgroud)

组件正确地输出时间

Components: <NSDateComponents: 0x17414a7c0>
Hour: 8
Minute: 30
Second: 0
Run Code Online (Sandbox Code Playgroud)

并且从用户默认值中正确检索日期

Date 1: 2015-01-28 07:30:00 +0000
(It's 7 rather than 8 but it makes sense, since it's stored at UTC)
Run Code Online (Sandbox Code Playgroud)

但是,使用dateFromComponents时会发生这种情况

Date 3: 0001-01-01 07:40:04 +0000
Run Code Online (Sandbox Code Playgroud)

我甚至不明白40和04来自哪里

nsdate nscalendar ios swift

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