如何将一个字符串@"2012-12-21"转换成NSDate模式
新的SDK貌似不再支持 [NSDate initWithString]这个方法
那么现在应该如何转换呢,以下代码
NSString --> NSDate:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *tempDate = [dateFormatter dateFromString:@"2012-12-21"];
NSDate --> NSString:
NSDate *date = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSString *dateAndTime = [dateFormatter stringFromDate: date];
今日关于自定义UITabBarController的CustomBar的类库,
遇到一系列诡异的动画效果以及之前没有注意的问题
首先,CustomBar 继承了UITabBarController
并且拥有相应的显示 和 隐藏 等方法
方法展示如下
在调用上面的隐藏方法的时候,并不能将tabbar全部隐藏,还留下一条白色不可用区域(tabbar区域)。
如何将其全部隐藏呢?除了调用上述隐藏方法之外,还需要在push的时候调用
hidesBottomBarWhenPushed方法,代码如下
这样就能将其全部隐藏了
---------------------------------------以下是本人遇到的匪夷所思的问题------------------
如果你在隐藏tabbar的页面中(举个例子,你从文章列表页push到文章阅读页,为了用户阅读体验较好,你需要用以上方法隐藏tabbar,但是在阅读之前,你还需要判断用户是否登陆、或者说是否拥有阅读该篇文章的权限。)这个时候你若想用presentModalViewController的方式弹出登陆页面,那么轻无比将 上述显示tabbar方法中的的那两行已注释掉的代码,务必进行注释,不然在用户进行dismissModalViewControllerAnimated的时候,tabar会已诡异的方式从屏幕的最上方滑下来。注释掉之后虽然问题初步解决,但我始终不明白的额是为什么这个tabbar会跑到上面去。
源代码参见:
http://write.blog.csdn.net/postedit/8195438
但是有些不妥当,修正如下:
onClick()中的处理不正确,如下:
if (!flag) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setIcon(android.R.drawable.ic_dialog_alert); builder.setTitle("网络状态"); builder.setMessage("当前网络不可用,是否设置?"); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ComponentName comp = new ComponentName( "com.android.settings", "com.android.settings.WirelessSettings"); Intent mIntent = new Intent(); mIntent.setComponent(comp); mIntent.setAction("android.intent.action.VIEW"); startActivity(mIntent); } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builder.create(); builder.show(); }
修改如下:
if (android.os.Build.VERSION.SDK_INT > 10) { context.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS)); } else { context.startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS)); }
涉及的源文件
frameworks\base\include\utils\RefBase.h
frameworks\base\include\utils\Atomic.h
frameworks\base\libs\utils\RefBase.cpp
RefBase类是android native中所有类的基类
sp类是strong pointer
wp类是weak pointer
简略实例分析
class A :public RefBase
{
}
int main()
{
A* pA = new A();-----------------------(1)
{
sp<A> spA(pA);------------------------(2)
wp<A> wpA(pA);-----------------------(3)
}
------------------------------------------------(4)
}
(1)构建对象pA-------------------------------------------->我们称之为实际对象
1>查看RefBase的构造函数
RefBase::RefBase()
: mRefs(new weakref_impl(this))
{
// LOGV("Creating refs %p with RefBase %p\n", mRefs, this);
}
同时,构建了一个mRefs对象---------------------->我们称之为影子对象
2>查看weakref_impl的构造函数
weakref_impl派生于RefBase的内部类weakref_type
weakref_impl(RefBase* base)
: mStrong(INITIAL_STRONG_VALUE)----------------->sp 引用计数
, mWeak(0)---------------------------------------------------->wp引用计数
, mBase(base)------------------------------------------------>实际对象,也就是pA
, mFlags(0)
, mDestroyer(0)
{
}
(2)sp引用spA
成员变量m_ptr---------------->实际对象,也就是pA
mWeak == 1
mStrong==1
(3)wp引用对象wpA
成员变量m_ptr--------------->实际对象,也就是pA
m_refs-------------------------->影子对象,也就是mRefs
mWeak=1;
(4)析构spA,wpA
至此,mStrong==1, mWeak==2
mStrong==0时,delete 实际对象pA
mWeak==0时,delete影子对象mRefs