小编Phi*_*ert的帖子

iPhone:以编程方式将Tab Bar控制器添加到导航控制器

我正在开发一个iPhone应用程序,我开始使用基于导航的模板.但是现在我想在底部添加一个Tap Bar控制器,我想在不使用Interface Builder的情况下执行此操作.谁能告诉我怎么做?提前致谢!

iphone objective-c uinavigationcontroller

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

.NET本机代码在构造函数上崩溃了吗?.Invoke()(null-propagation)

在经历了一天中的大部分时间之后,我偶然发现了使用.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)

.net c# reflection .net-native null-propagation-operator

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

在将对象添加到集合之前使用自动释放?

我一直在查看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大师可以对此有所了解吗?

iphone memory-management objective-c autorelease

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

按钮标签在XIB支持的视图中消失

我有一个严重的问题,一个由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)

objective-c xib uiview nib ios

5
推荐指数
1
解决办法
955
查看次数

iphone - UIActionSheet和U​​ITabBar之间的奇怪错误

在我的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)

iphone uiactionsheet

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

ADO.NET连接字符串和密码中带有"="

如何构建一个连接字符串,其中包含一个带有"="的密码?(我正在连接到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)

两者都不起作用.

mysql ado.net connection-string

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

在Objective-C中自定义init方法,如何避免递归?

我想创建一个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)

所以我的问题是:有更好的方法来处理这个问题吗?我确定我错过了一些非常明显的东西,但我没有看到它.

编辑:我想这样做的原因,我可以在下面的评论中看到:

我想创建一个始终以特定视图控制器开始的导航控制器.我想把这个隐藏在班级的消费者手中.无需暴露不需要暴露的东西.让生活变得更轻松,编码更清晰(封装发明的原因之一,对吧?)

iphone cocoa-touch objective-c init uikit

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

Oracle序列:CURRVAL不允许在这里?

以下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)

oracle sequence

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

Objective C confusion - 将sythesized vars设置为ivars

我已经注意到在一些例子中我已经看到你将引擎(类变量)设置为_engine(ivar).我不明白.这里发生了什么?

这是我所说的一个例子:@synthesize engine = _engine,delegate = _delegate

iphone objective-c

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

MonoTouch UIAlertView无法显示

我有一个适用于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)

xamarin.ios ipad

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