我正在开发一个iPhone应用程序,我开始使用基于导航的模板.但是现在我想在底部添加一个Tap Bar控制器,我想在不使用Interface Builder的情况下执行此操作.谁能告诉我怎么做?提前致谢!
在经历了一天中的大部分时间之后,我偶然发现了使用.NET Native(用于Windows UWP应用程序)编译的.NET代码的一个非常奇怪的问题.
以下代码适用于任何.NET运行时环境,包括Mono,Xamarin等:
public class ABC {}
// ...
var constr = typeof(ABC).GetTypeInfo().DeclaredConstructors.First();
var abc = (ABC) constr?.Invoke(new object[0]);
// abc now contains an instance of ABC
Run Code Online (Sandbox Code Playgroud)
在具有.NET本机编译的Windows UWP上,代码会引发类型异常 NotImplementedException
但是,当删除空传播运算符时,它在.NET Native上完美运行:
public class ABC {}
// ...
var constr = typeof(ABC).GetTypeInfo().DeclaredConstructors.First();
var abc1 = (ABC) constr.Invoke(new object[0]);
// abc1 now contains an instance of ABC
// the following line throws an exception on .NET Native
// but it works fine on any other .NET runtime
var abc2 = …Run Code Online (Sandbox Code Playgroud) 我一直在查看StackOverflow上提出的问题,但是在Objective-C中有很多关于内存管理的内容,我找不到我想要的答案.
问题是,在将新创建的对象添加到集合(如NSMutableArray)之前,是否可以(并建议)调用autorelease?或者我应该在添加后明确地发布它.(我知道NSMutableArray会保留对象)
这说明了我的问题:
场景A(自动释放):
- (void) add {
// array is an instance of NSMutableArray
MyClass *obj = [[[MyClass alloc] init] autorelease];
[array addObject:obj];
}
Run Code Online (Sandbox Code Playgroud)
场景B(明确发布):
- (void) add {
// array is an instance of NSMutableArray
MyClass *obj = [[MyClass alloc] init];
[array addObject:obj];
[obj release];
}
Run Code Online (Sandbox Code Playgroud)
我认为两者都是正确的,但我不确定,我肯定不知道什么是优先的方式.
Objective-C大师可以对此有所了解吗?
我有一个严重的问题,一个由XIB文件定义的视图.这是一个简单的数字输入板,按钮为0-9:

问题是在极少数情况下(如上面的屏幕截图所示),缺少按钮标签.它并不总是相同的标签(在上面的示例中,缺少"0").通常关闭视图并重新创建它可以解决问题.
XIB文件的按钮附加到视图中的UIButton控件.视图构造如下:
@property (nonatomic,strong) IBOutlet UIButton *button0;
// etc...
@property (nonatomic,strong) IBOutlet UIButton *button9;
- (id)initWithFrame:(CGRect)frame
{
self = [[UINib nibWithNibName:[[self class] description] bundle:nil]
instantiateWithOwner:nil
options:nil
][0];
if (self)
{
self.frame = frame;
// ...
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
没有涉及控制器,我也不想这样.
该视图是使用以下代码创建的:
CustomView *view = [[CustomView alloc] initWithFrame:frame];
Run Code Online (Sandbox Code Playgroud)
当问题发生时(通常不是随机的),用户点击带有缺失标签的按钮,按钮的titleLabel.text属性为nil:
- (IBAction) numberButtonPressed:(UIButton *)button
{
NSLog("button label = %@",button.titleLabel.text);
// output: button label = (null)
}
Run Code Online (Sandbox Code Playgroud)
XIB文件的XML:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="5056" systemVersion="13C64" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
<dependencies> …Run Code Online (Sandbox Code Playgroud) 在我的tabbar应用程序中,我从动作中调出一个UIActionsheet,从导航控制器标题栏中的按钮调用.
UIActionsheet按照正常情况运行,除了下面按钮'cancel'的下半部分,奇怪的是它不响应iPhone模拟器中的触摸.取消按钮的下半部分是UITabBar所在的位置,因此可能是问题所在.
有任何想法吗?
替代文字http://img12.imageshack.us/img12/2166/screenshot20100119at236.png
解
我的解决方案来自第一个答案.这是我的工作示例代码
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:message delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"OK" otherButtonTitles:nil];
actionSheet.actionSheetStyle = UIActionSheetStyleDefault;
[actionSheet showInView:[UIApplication sharedApplication].keyWindow];
[actionSheet release];
Run Code Online (Sandbox Code Playgroud) 如何构建一个连接字符串,其中包含一个带有"="的密码?(我正在连接到MySql 5.1)
例如,假设密码为"Ge5f8z = 6",连接字符串是什么样的?
我试过了:
Server=DBSERV;Database=mydb;UID=myuser;PWD="Ge5f8z=6";
Run Code Online (Sandbox Code Playgroud)
和
Server=DBSERV;Database=mydb;UID=myuser;PWD=Ge5f8z=6;"
Run Code Online (Sandbox Code Playgroud)
两者都不起作用.
我想创建一个UINavigationController的子类,它总是以相同的根控制器开始.没什么特别的,所以(对我来说)覆盖这样的init方法是完全合理的:
- (id) init {
rootController = [[MyController alloc] init];
if (self = [super initWithRootViewController:rootController]) {
// do some more initialization
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
这显然会产生一个问题,因为[super initWithRootViewController]将调用[UINavigationController init],这当然是我们重写的init方法,因此将发生无限递归.
我不想创建一个名为"initCustom"的不同名称的init方法.
目前我只能提出一个解决方案,但我真的讨厌这种黑客攻击:
- (id) init {
if (initCalled)
return self;
initCalled = YES;
rootController = [[MyController alloc] init];
if (self = [super initWithRootViewController:rootController]) {
// do some more initialization
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:有更好的方法来处理这个问题吗?我确定我错过了一些非常明显的东西,但我没有看到它.
编辑:我想这样做的原因,我可以在下面的评论中看到:
我想创建一个始终以特定视图控制器开始的导航控制器.我想把这个隐藏在班级的消费者手中.无需暴露不需要暴露的东西.让生活变得更轻松,编码更清晰(封装发明的原因之一,对吧?)
以下Oracle SQL代码生成错误" ORA-02287:此处不允许序列号 ":
INSERT INTO Customer (CustomerID,Name) VALUES (Customer_Seq.nextval,'AAA');
SELECT * FROM Customer where CustomerID=Customer_Seq.currval;
Run Code Online (Sandbox Code Playgroud)
第二行(SELECT语句)发生错误.我真的不明白这个问题,因为这确实有效:
INSERT INTO Customer (CustomerID,Name) VALUES (Customer_Seq.nextval,'AAA');
SELECT Customer_Seq.currval from dual;
Run Code Online (Sandbox Code Playgroud) 我已经注意到在一些例子中我已经看到你将引擎(类变量)设置为_engine(ivar).我不明白.这里发生了什么?
这是我所说的一个例子:@synthesize engine = _engine,delegate = _delegate
我有一个适用于iPad的MonoTouch应用程序(iOS 4.2).我有一个主窗口,显示一个按钮和一个导航栏.当我单击此按钮时,我想显示另一个控件从Web加载一些数据.我实例化UIAlertView并调用Show方法.比我为新控件调用数据加载,然后完成后我会显示新控件.我的问题是,在调用alert.Show()后,没有显示任何内容,只有背景按预期更改.在我呈现新控件后显示警报本身.我的代码:
public void EnterCloudControl(TagCloudItem item)
{
using(UIAlertView loadingDialog = new UIAlertView("title", "message", null, "ok", null))
{
loadingDialog.Show();
MyContentCloudController cc = new MyContentCloudController(ContentFrame, this);
NavigationController.PushViewController(cc, true);
cc.LoadData(item, DateTime.Now.AddDays(-30), null, string.Format("&Filter={0}{2};Equal;{1}", item.Field, item.Tag,
item.Field == "http://schemas.cid.biz/ps/nlp/entities" ? ",Label" : string.Empty), null);
cc.SetupNavigationBar();
loadingDialog.DismissWithClickedButtonIndex(0, true);
}
}
Run Code Online (Sandbox Code Playgroud) iphone ×5
objective-c ×5
.net ×1
.net-native ×1
ado.net ×1
autorelease ×1
c# ×1
cocoa-touch ×1
init ×1
ios ×1
ipad ×1
mysql ×1
nib ×1
oracle ×1
reflection ×1
sequence ×1
uikit ×1
uiview ×1
xamarin.ios ×1
xib ×1