在iPad应用程序中,我正在使用UIView的自定义子类和UIViewController.这是视图标题:
@interface pdfView : UIView {
CGPDFDocumentRef doc;
}
-(void)setDoc:(CGPDFDocumentRef)newDoc;
@end
Run Code Online (Sandbox Code Playgroud)
这是控制器头:
@interface iPadPDFTestViewController : UIViewController {
CGPDFDocumentRef doc;
}
- (void)loadPDF;
@end
Run Code Online (Sandbox Code Playgroud)
控制器实现的一部分:
- (void)viewDidLoad {
[super viewDidLoad];
[self loadPDF];
[self.view setDoc:doc];
}
Run Code Online (Sandbox Code Playgroud)
在Interface Builder中,我将视图对象设置为使用类pdfView.
在编译时,[self.view setDoc:doc];
会发出警告"'UIView'可能无法响应'--setDoc'." 我猜这个警告出现是因为编译器认为它正在查看UIView(它没有实现setDoc方法)而不是pdfView.但为什么会这么想?我怎么能告诉它它正在看什么类,以便清除警告?
我有一个简单的问题,但它让我感到困惑.以下代码获取UIControlTouchUpInside的UNDEFINED错误.我需要包含或导入什么?如果我注释掉这一行,它就可以了.这意味着forState:定义了UIControlStateNormal.我是新人,所以希望你能提供帮助.
UIButton * button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setTitle:@"Accept?" forState:UIControlStateNormal];
[button addTarget:self action:@selector(acceptTapped) forControlEvents:UIControlTouchUpInside];
Run Code Online (Sandbox Code Playgroud) 我创建了一个UIButton的子类:
//
// DetailButton.h
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface MyDetailButton : UIButton {
NSObject *annotation;
}
@property (nonatomic, retain) NSObject *annotation;
@end
//
// DetailButton.m
//
#import "MyDetailButton.h"
@implementation MyDetailButton
@synthesize annotation;
@end
Run Code Online (Sandbox Code Playgroud)
我想我可以通过执行以下操作创建此对象并设置注释对象:
MyDetailButton* rightButton = [MyDetailButton buttonWithType:UIButtonTypeDetailDisclosure];
rightButton.annotation = localAnnotation;
Run Code Online (Sandbox Code Playgroud)
localAnnotation是一个NSObject,但它实际上是一个MKAnnotation.我不明白为什么这不起作用,但在运行时我得到这个错误:
2010-05-27 10:37:29.214 DonorMapProto1[5241:207] *** -[UIButton annotation]: unrecognized selector sent to instance 0x445a190
2010-05-27 10:37:29.215 DonorMapProto1[5241:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UIButton annotation]: unrecognized selector sent to instance 0x445a190'
Run Code Online (Sandbox Code Playgroud)
"
我不明白为什么它甚至会查看UIButton,因为我已经将其子类化了,所以应该查看MyDetailButton类来设置该注释属性.我错过了一些非常明显的东西.感觉就像:)
提前感谢您提供的任何帮助
罗斯
这不是一个考虑思考的问题 - 为什么NSNotificationCenter在发布时抛出异常?我还是iPhone开发的新手,因此还不知道Cocoa的内部,所以理解为什么会很好.
我将defaultCenter分配给变量,调用addObserver:selector:name:object然后释放上一个变量,但调用[notify release]会使应用程序崩溃.我在代码中没有做任何奇怪的事情,所以找出它为什么这样做会很有趣.
有人遇到过这个问题吗?
我正在尝试使用最新版本的XCode制作一个简单的Cocoa应用程序.在界面构建器中,我添加了NSTextField和NSButton.当我按下按钮时,我希望它清除文本字段中的任何内容.
我创建了一个名为AppController.h的新类.这是内容:
#import <Foundation/Foundation.h>
@interface AppController : NSObject {
IBOutlet id textView;
}
- (IBAction) clearText: sender;
@end
Run Code Online (Sandbox Code Playgroud)
AppController.m看起来像这样:
#import "AppController.h"
@implementation AppController
- (IBAction) clearText: sender
{
[textView setString: @" "];
}
@end
Run Code Online (Sandbox Code Playgroud)
我将按钮连接到clearText,将文本框连接到textView.
该程序编译并运行.但是当我按下按钮时,没有任何反应.这是为什么?
我试图使用方法setString来更改文本字段中的文本,但它不起作用.然后我将其更改为setStringValue并且它有效.那么setString用于什么?
我在视图控制器中尝试了这段代码,但它没有用.这是为什么?
- (void)viewDidLoad {
[self setBackgroundColor:[UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0]];
[super viewDidLoad];
}
Run Code Online (Sandbox Code Playgroud) 简单的iPad应用.
App加载并显示由UIViewController的子类控制的UITableView.这工作和旋转完美.
单击表视图中的行会导致创建新的子视图,该子视图也由UIViewController子类控制.这在纵向显示良好,但不适应横向,并且不响应设备旋转.
两个视图控制器都包括:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
NSLog(@"Responding to rotation");
return YES;
}
Run Code Online (Sandbox Code Playgroud)
但是只有原始视图控制器响应:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
NSLog(@"View About to rotate");
}
Run Code Online (Sandbox Code Playgroud)
在IB中,我检查了视图是否会自动调整,其中的组件(UIScrollView和一些UILabels)将正确调整.
任何人都可以帮我解决为什么子视图没有响应.
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"Hello World!", [NSURL URLWithString:@"http://www.apple.com"], nil];
for (id *object in array) {
NSLog(@"Class name: %@", [object className]);
}
Run Code Online (Sandbox Code Playgroud)
鉴于上述不同对象的数组,通过它们快速枚举的正确方法是什么?使用上面的代码我确实看到了我的日志语句,但Xcode确实抱怨以下消息
我的NSLog语句中的接收器类型'id*'无效.
cocoa ×6
cocoa-touch ×6
iphone ×4
objective-c ×4
uikit ×3
ipad ×2
uibutton ×2
autorotate ×1
exception ×1
ipod-touch ×1
macos ×1
subclass ×1
uicontrol ×1