根据我对NSNumber的理解,如果使用某种数据类型创建NSNumber,则需要使用相同的数据类型访问该变量.例如
NSNumber *myIntNumber = [NSNumber numberWithInt:1];
int myInt = [myIntNumber intValue];
NSNumber *myNSIntegerNumber = [NSNumber numberWithInteger:1];
NSInteger myInteger = [myIntNumber integerValue];
Run Code Online (Sandbox Code Playgroud)
如果使用#define变量创建NSNumber:
#define MY_DEFINE 6
Run Code Online (Sandbox Code Playgroud)
这是否意味着我无法做到以下几点
NSNumber *myNSIntegerNumber = [NSNumber numberWithInteger:MY_DEFINE];
NSInteger myInteger = [myIntNumber integerValue];
Run Code Online (Sandbox Code Playgroud)
因为MY_DEFINE不是NSInteger?
我知道上面的代码可以在32位应用程序中运行,但我正在努力确保它可以在64位应用程序上运行,这对于这些事情也更加挑剔.当然,做正确的事情永远不会伤害.
如果我不能做到这一点,我应该尝试不同地定义MY_DEFINE,以便我可以使用它来创建一个NSNumber,以后可以用来检索NSInteger?
在Core Data中,我有许多属性声明为Integer 64,然后通过NSNumber属性访问(默认情况下这是).
如果我通过以下方式存储和访问这些值,这是否重要:
NSNumber *mySetValue = [NSNumber numberWithInt:someIntValue];
[myObject setMyNumberProperty:mySetValue];
int myRetrievedValue = [myObject.myNumberProperty intValue];
Run Code Online (Sandbox Code Playgroud)
或者
NSNumber *mySetValue = [NSNumber numberWithInteger:someIntegerValue];
[myObject setMyNumberProperty:mySetValue];
NSInteger myRetrievedValue = [myObject.myNumberProperty integerValue];
Run Code Online (Sandbox Code Playgroud)
?
有两种情况我想知道答案:1)如果所需的值用于计算(它包含将转换为货币的数量或值)和2)如果该值只是一个类型基本上只会与自身进行比较,不会用于任何计算.是否可以在一种情况下使用numberWithInt和intValue而不是另外两种情况,或者在两种情况下都必须使用numberWithInteger和integerValue?
此外,如果我之前已将所有值存储为[NSNumber numberWithInt:],这是否重要 - 我可以简单地更改现在存储/检索值的方式,或者我是否需要保持一致性以免产生问题当前用户数据?
我对32位和64位iOS应用程序的工作特别感兴趣.
另外 - 如果核心数据值是整数32,整数16,整数64等,它会对你的答案产生影响吗?
使用Facebook的新SSO,登录Facebook意味着我的应用程序暂时关闭.问题是我的应用程序要求规定它不能在后台运行.因此,当我的应用程序重新启动时,它位于原始选项卡/视图控制器上.
我试图让事情回到facebook登录视图.这需要以编程方式选择选项卡并从该选项卡推送到单独的视图控制器.
我可以通过编程方式选择一个选项卡没问题:
[[UIApplication sharedDelegate].tabBarController setSelectedIndex:4];
Run Code Online (Sandbox Code Playgroud)
但是我无法从新选择的选项卡中推送视图控制器.我试过了
AboutViewController *nextViewController = [[AboutViewController alloc] initWithStyle:UITableViewStyleGrouped];
((AboutViewController *)nextViewController).hidesBottomBarWhenPushed = NO;
[[[[[UIApplication sharedDelegate] tabBarController] selectedViewController ] navigationController] pushViewController:nextViewController animated:NO];
[nextViewController release];
Run Code Online (Sandbox Code Playgroud)
和
AboutViewController *nextViewController = [[AboutViewController alloc] initWithStyle:UITableViewStyleGrouped];
((AboutViewController *)nextViewController).hidesBottomBarWhenPushed = NO;
[[[[[UIApplication sharedDelegate] tabBarController] navigationController] pushViewController:nextViewController animated:NO];
[nextViewController release];
Run Code Online (Sandbox Code Playgroud)
甚至可以这样做吗?
iphone tabbar pushviewcontroller single-sign-on facebook-graph-api
我正在iOS应用程序中实现Facebook SDK 3.0.以前,我可以在我的应用程序中使用webview登录,但似乎SDK 3.0中不再提供该选项.
我的应用程序不在后台运行(这是我此时不会改变的事情).我目前从一个不是根控制器的视图控制器启动Facebook(在应用程序首次启动时显示); 当登录成功完成时,我使用完成处理程序完成Facebook请求.
问题是,当Facebook登录启动时,它会立即将用户从应用程序中删除; 由于应用程序已终止,因此永远不会调用完成处理程序结果.所以用户留在rootController上,登录后没有结果.
有没有办法可以从SDK 3.0中的应用程序内登录到Facebook?
如果没有,是否有一种解决方法可以让我的应用程序在后台运行?
在Xcode中不再显示允许扩展/折叠支架/支架{}的侧栏,在代码行号旁边.我试图找出如何取回它.
当使用一个prefersLargeTitles UINavigationController
的UINavigationBar
中iOS 11
,导航栏增加高度.在我检查过的iPhone上增加了44到96,但我认为这些数字可以在每个设备上更改(或者至少我们需要编码,就好像它们可以).
我想以编程方式找到"额外"高度 - 在UINavigationBar
显示大标题时添加到传统下方的大标题区域的高度.我可以很容易地找到显示大标题的栏的整个高度,但有没有办法以编程方式单独找到栏的大标题部分的高度(没有任何硬编码)?
我需要这个的原因是有时候我想以编程方式滚动到UITableView的顶部,拉下大标题(在"常规高度"导航栏下滚动)以便它显示,并且我需要的内容偏移是导航栏的额外高度.我可以使用导航栏的总高度,但这会将UITableView拉得太远.要做到这一点,我需要硬编码如下:
[self.tableView setContentOffset:CGPointMake(0, -52) animated:NO];
Run Code Online (Sandbox Code Playgroud) uinavigationbar uinavigationcontroller ios ios11 large-title
我已经想出如何在我的iPhone应用程序中添加自定义日历,但我无法弄清楚如何将该日历添加到设备的日历中.从应用程序内部查看时,该事件显示正确的日历,但即使我点击事件的日历行,我的日历也不在列表中,如果我想保持日历名称正确,我必须取消.有没有办法'订阅'我本地创建的日历,以便我可以在设备上的日历应用程序中看到它(显然,我也希望它与用户的计算机等同步).
对于应用程序的最新更新,我看到许多崩溃日志,其中包含核心数据无法解决的错误.但是在应用程序(启动或其他地方)中没有任何地方删除无法实现故障的对象,也不会删除它们.怎么会发生这种错误?有没有办法捕捉它并在实时应用程序中修复它?
如果你添加但是没有正确保存对象呢?