以下两种self语法访问对象属性的方法有何区别: -
方法1: -
self.effortView = [[EffortView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)];
self.effortView.effortTableView = [[UITableView alloc]initWithFrame:CGRectMake(25, 25, 300, 420) style:UITableViewStyleGrouped];
Run Code Online (Sandbox Code Playgroud)
方法2: -
effortView = [[EffortView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)];
effortView.effortTableView = [[UITableView alloc]initWithFrame:CGRectMake(25, 25, 300, 420) style:UITableViewStyleGrouped];
Run Code Online (Sandbox Code Playgroud)
effortView被定义为一个属性,并合成到类编址为self在方法1.这两种方法都有效.
我在Mac 10.6.6上使用Xcode 4.0 iPhone SDK 4.3.
请赐教.
谢谢你们
我已经在我的应用程序中添加了一些调试代码,我只想在需要时调用它.我记得有一些IFDEF可以用来有条件地将代码包含在源文件中.
例如,我可能有这样的事情:
IFDEF kDebugEnabled == YES {
// some debugging code here
}
Run Code Online (Sandbox Code Playgroud)
然后,如果kDebugEnabled为YES,则只将这段代码编译成二进制文件.
我怎么能这样做?
请注意:我不想使用项目编译器标志设置.我只是想定义一个BOOL(或者同样有用的东西),这是真或假,然后只需在我的App Delegate中轻松设置它.我发现很难导航到项目编译器设置,搜索标志然后设置它.我知道有一个可能有用的Debug标志.
信不信由你,我在问这个问题之前已经在互联网上搜索过了.令人难以置信的是,我还没有找到一个很好的明确示例,说明如何创建NSDictionaries的NSDictionary.
这是我到目前为止的代码,但它打印为null.有任何想法吗?
// Here I am creating the dictionaries in the code until I start getting them from the server ;)
NSArray *keys = [NSArray arrayWithObjects:@"mission", @"target", @"distance",@"status", nil];
NSArray *objectsA = [NSArray arrayWithObjects:@"tiger", @"bill", @"5.4km", @"unknown", nil];
NSDictionary *tiger = [NSDictionary dictionaryWithObjects:objectsA
forKeys:keys];
NSArray *objectsB = [NSArray arrayWithObjects:@"bull", @"roger", @"10.1km", @"you are dead", nil];
NSDictionary *bull = [NSDictionary dictionaryWithObjects:objectsB
forKeys:keys];
NSArray *objectsC = [NSArray arrayWithObjects:@"peacock", @"geoff", @"1.4km", @"target liquidated", nil];
NSDictionary *peacock = [NSDictionary dictionaryWithObjects:objectsC
forKeys:keys];
// …Run Code Online (Sandbox Code Playgroud) UIButton有3种不同的图像属性:
currentBackgroundImage currentImage imageView
他们每个人代表什么?
我正在编写一个应用程序,需要在另一个方法完成后运行方法.(常见情况,对吧?)
我正在尝试实现链式方法.我想出的最好的就是打电话performSelector:withObject:afterDelay:.我只是不确定这是否是最好的方法.我已经研究了Cocos2d游戏引擎如何实现它的CCSequence类,但我不确定我是否理解它.
我怀疑块在这里会做得很好,除了我不确定如何使用它们作为回调对象或其他什么.
我将如何一个接一个地实现运行方法的机制?(我愿意使用定时器或块,但我不知道在这种情况下我是如何使用块的.)
编辑:
为了澄清,我正在尝试实现一个类似cocos2d CCSequence类的系统,它采用一些方法并按顺序"调度"它们.像动画这样的东西,需要花费不止一个时钟周期才能运行.
我不是要阻止主线程,也不想相互硬编码方法.Cocos2d有一个排序系统,我可以将方法传递给队列并按顺序运行它们.
编辑2:
此外,我希望能够取消我的预定队列,所以我不确定GCD是否适合这一点.可以取消GCD串行队列吗?
我想停止WebPage加载UIWebView,同时传递另一个URL进行加载.
我正在尝试将UITextField连接到文件的所有者.虽然我已经服用了
IBOutlet UITextField *txt1
Run Code Online (Sandbox Code Playgroud)
但我无法连接插座

你能否说一下可能出错的地方?
我对Objective-C和iPhone编程很新,所以如果这是一个新手问题,我很抱歉.我有一个简单的应用程序需要从一个视图到另一个视图.第一个视图是UIViewController.我在IB中设置了xib文件(即将一些按钮拖到窗口上)并连接所有按钮(这些按钮都可以工作).然后我创建了另一个xib文件和类(也是一个UIViewController)并将它们连接起来.在第一个视图中按下按钮时,我想加载第二个视图.这是应该推动视图的代码:
-(IBAction)createAccount:(id)sender{
CreateAccountViewController*acctView = [[CreateAccountViewController alloc] initWithNibName:@"CreateAccount" bundle:nil];
[self.navigationController pushViewController:acctView animated:YES];
[acctView release];
}
Run Code Online (Sandbox Code Playgroud)
但这没有任何作用.当我将print语句放在createAccount方法中时,那些是打印的(我可以多次单击该按钮并且它永远不会崩溃)但是从不推动acctView.当我打印出self.navigationController的值时,它返回null.它甚至更奇怪,因为如果我以模态方式呈现acctView,那么它的工作原理.
-(IBAction)createAccount:(id)sender{
CreateAccountViewController*acctView = [[CreateAccountViewController alloc] initWithNibName:@"CreateAccount" bundle:nil];
[self presentModalViewController:acctView animated:YES];
[acctView release];
Run Code Online (Sandbox Code Playgroud)
}
这工作得很好,但我不想以模态方式使用视图.我完全迷失在这里.在过去的几个小时里,我遇到过很多帖子,说要用UINavigationController做一些事情并将其挂钩到我的视线,但我该怎么做?任何帮助是极大的赞赏!谢谢.
有时我会在不释放物体时感到困惑.我有:
NSTimer *timer2;
timer2 = [NSTimer scheduledTimerWithTimeInterval: (5)
target: self
selector: @selector(someMethod:)
userInfo: nil
repeats: YES];
Run Code Online (Sandbox Code Playgroud)
并且每五秒执行一次的方法是:
-(void) someMethod:(NSTimer*)theTimer
{
NSLog(@"code got executed");
}
Run Code Online (Sandbox Code Playgroud)
我有另一种方法,在我的根视图控制器上放置另一个nib文件:
ViewControllerObjetivos *control = [ViewControllerObjetivos alloc];
[control initWithNibName:@"ViewControllerObjetivos" bundle:nil];
UINavigationController *navControl = [[UINavigationController alloc]
initWithRootViewController:control];
[self presentModalViewController:navControl animated:NO];
[navControl setNavigationBarHidden:YES];
[control release];
[navControl release];
Run Code Online (Sandbox Code Playgroud)
当我调用最后一个方法时,新的nib文件放在根视图控制器上.而someMethod仍被调用!
所以我很困惑,如果我应该释放timer2因为我没有使用单词init或alloc也没有复制来初始化它.那么我想做什么呢?我应该停止它然后调用我显示的最后一个方法吗?或者我应该发布整个nib文件,因为我将要使用新的nib文件?
我的应用程序针对每个方向具有非常不同的UI结构
我应该在iPad的旋转生命周期的哪个阶段删除,然后添加方向的UI以确保最顺利的过渡?
所以我在视图中有一个按钮,我知道如何访问它,但我不知道如何更改该按钮上的图片.这是我得到的:
for(UIView *button in [okvir subviews]){
if([button isKindOfClass:[UIButton class]]){
UIImage *picture=[UIImage imageWithData:slika];
[button setImage:picture forState:UIControlStateNormal];
}
}
Run Code Online (Sandbox Code Playgroud)
但是会导致错误:
No visible @interface for 'UIView' declares the selector 'setImage:forState:'
Run Code Online (Sandbox Code Playgroud)
我猜这是因为按钮是UIView而不是UIButton,任何想法如何做到这一点?
我正在cocos2d中制作一个简单的物理游戏,并希望在滑动速度的同时启动一个粒子.为了获得速度,我需要进行两次触摸并确定(位置差异)/(时间戳的差异).我的问题是我无法接触两次.我尝试了几种方法,但没有一种方法可行.
我尝试存储第一次触摸
@property (nonatomic, strong) UITouch *firstTouch;
...
- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
[self setFirstTouch:touch];
NSLog(@"first touch time 1: %f", self.firstTouch.timestamp);
}
-(void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
NSLog(@"touch ended");
NSLog(@"first touch time 2: %f", self.firstTouch.timestamp);
NSLog(@"end of touch time: %f", touch.timestamp);
}
Run Code Online (Sandbox Code Playgroud)
但这给了我每次时间戳0的差异.它似乎用最近的触摸取代了firstTouch
我是否做错了指针,这被替换了?
也许我可以从ccTouchesMoved那里接受最后两次接触?
ios ×11
iphone ×11
objective-c ×10
cocoa-touch ×5
ipad ×3
ios4 ×2
block ×1
nsdictionary ×1
release ×1
uibutton ×1
uiview ×1
uiwebview ×1
xcode ×1