如果我想拥有一个指向函数的指针数组并且从一开始就不知道数组的大小,该怎么办?我只是好奇是否有办法做到这一点.使用新的声明或其他东西.看起来很像的东西
void (* testArray[5])(void *) = new void ()(void *);
Run Code Online (Sandbox Code Playgroud) 我正在尝试与Game Center实施邀请,有一件事我不明白.好的,我已经从一个设备向另一个设备发送了邀请.然后我在接收器上有一个UIAlertView,询问我我想接受或拒绝邀请.当我接受它时,它是这样处理的:
[GKMatchmaker sharedMatchmaker].inviteHandler = ^(GKInvite *acceptedInvite, NSArray *playersToInvite)
{
// Insert application-specific code here to clean up any games in progress.
if (acceptedInvite)
{
GKMatchmakerViewController *mmvc = [[[GKMatchmakerViewController alloc] initWithInvite:acceptedInvite] autorelease];
mmvc.matchmakerDelegate = self;
[presentingViewController presentModalViewController:mmvc animated:YES];
}
else if (playersToInvite)
{
GKMatchRequest *request = [[[GKMatchRequest alloc] init] autorelease];
request.minPlayers = 2;
request.maxPlayers = 4;
request.playersToInvite = playersToInvite;
GKMatchmakerViewController *mmvc = [[[GKMatchmakerViewController alloc] initWithMatchRequest:request] autorelease];
mmvc.matchmakerDelegate = self;
[presentingViewController presentModalViewController:mmvc animated:YES];
}
};
Run Code Online (Sandbox Code Playgroud)
嗯,这很好,但接下来呢?发件人设备显然正在等待某种标准类型的响应,因为它还会显示一条警告,告诉我如果我点按"立即播放",则会收到一些尚未接听的邀请.
那么我该如何接受邀请呢?我应该寄回什么样的数据(以及如何)?我究竟应该在接收器方面做些什么呢?点击"接受"后游戏是否应立即开始,或者我应首先关闭AlertView,然后点击"立即播放"?
Ray Wenderlich的教程说我应该选择第二种方式,但是当解除警报并点击"立即播放"时,发现发送方设备仍在等待响应并且不知道我已经接受了邀请.如果我此时点击"立即播放",那么,如上所述,它会显示一条警告,表示应用程序正在等待响应.所以,如果你曾经这样做过,请解释我应该怎么做.谢谢!
我在ASIHTTPRequest中完成了DUMMY.我刚刚下载了库并将其添加到我的项目中,现在我正在尝试理解使用它的基础知识.我在这里找到了一些很好的例子
这个小教程是关于将图像上传到服务器.我尝试了它,事情似乎有效(但我对[request responseString]返回的NSString感到困惑,它返回了整个网页的HTML代码)但我想知道如何下载图像(或任何上传的)服务器.搜索了一下之后,我发现了这个,但它没有给我任何答案,只有更多的问题,因为它对我来说还不太清楚.让我来填补我的问题:
1)您能否向我提供一小段代码,展示如何从服务器下载数据(无论哪种数据:图像,字符串,数字等)?
2)我应该知道服务器端的PHP代码以便与服务器一起工作吗?
3)如果是 - 我怎么知道服务器端的PHP代码?
4)如果请求是由php脚本或任何不同的方法处理的,那有多重要?
5)responseString的作用是什么?它给我一个巨大的HTML代码是否可以?
6)主要问题.是否有一个很好的ASIHTTPRequest教程?像"ASIHTTPRequest for dummies"之类的东西?我在这里找到了官方文档,但它解释了很糟糕的东西,我找不到任何其他教程.
迫切需要任何帮助.
我在课堂上宣布了NSArray
NSArray *labelsArray;
Run Code Online (Sandbox Code Playgroud)
我把它变成了财产
@property (nonatomic,retain) IBOutletCollection(UILabel) NSArray *labelsArray;
Run Code Online (Sandbox Code Playgroud)
我将它连接到IB中的四个UILabel.我分配了数组.当我这样做
NSLog(@"labelsArray.count %i",[labelsArray count]);
Run Code Online (Sandbox Code Playgroud)
它告诉我labelsArray的计数是0.我该怎么做才能将这些标签添加到数组中?
我想比较两个UIImages.如果我这样比较:
if ([UIImagePNGRepresentation ( holderImage) isEqualToData:UIImagePNGRepresentation([UIImage imageNamed:@"empty_image.png"])])
NSLog(@"empty image");
else
NSLog(@"not empty image");
Run Code Online (Sandbox Code Playgroud)
结果是YES,他们是平等的
如果我正在做以下事情
` if ([holderImage isEqual:[UIImage imageNamed:@"empty_image.png"]])
NSLog(@"empty image");
else
NSLog(@"not empty image"); `
Run Code Online (Sandbox Code Playgroud)
结果是NO,他们不是
情况非常复杂,因为:
1)图像必须(这意味着我非常肯定)相等所以我会相信第一个,除非
2)isEqual比较总能给出其他图像的真实结果.
所以我完全糊涂了.你觉得怎么样?顺便说一句,holderImage刚从NSUserDefaults中获取.您是否认为在存储在NSUserDefaults中时可能会以某种方式进行更改以便isEqual比较现在正在进行中?
我想使用GameKit通过WiFi在两个设备之间建立连接.Apple的文档说
如果选择了Internet连接,则应用程序必须关闭对等选择器对话框并显示其自己的用户界面以完成连接.
这就是我做的
- (void)peerPickerController:(GKPeerPickerController *)picker didSelectConnectionType:(GKPeerPickerConnectionType)type
{
if (type == GKPeerPickerConnectionTypeOnline)
{
picker.delegate = nil;
[picker dismiss];
[picker autorelease];
[alert setTitle:@"\n\n\n"];
[alert setMessage:@"Looking for other iPads, iPhones or iPod touches..."];
[alert addButtonWithTitle:@"Cancel"];
UIActivityIndicatorView *progress = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(125, 50, 30, 30)];
progress.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;
[alert addSubview:progress];
[progress startAnimating];
[alert show];
}
}
Run Code Online (Sandbox Code Playgroud)
好的,我已经展示了自己的界面.接下来呢?我如何连接?如何开始寻找同行?
可能重复:
为什么下面的代码没有崩溃,虽然我删除了对象?
今天我发现我对C++内存管理一无所知.请看一下这段代码:
class A
{
public:
A(){std::cout << "constructor called" << this << std::endl;}
~A(){std::cout << "destructor called" << this << std::endl;}
void test (){std::cout << "test" << this << std::endl;}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
A *aa = new A();
delete aa;
aa->test();
aa->test();
aa->test();
std::cout << "still works\n";
return a.exec();
}
Run Code Online (Sandbox Code Playgroud)
为什么不崩溃?尽管析构函数被调用,为什么它仍然继续执行?当我调用test方法时,我处理不再属于该应用程序的内存.
更令人惊讶的是,如果我插入它仍然有效,甚至aa = NULL;之后delete aa;.test方法被调用好了.我需要承认我完全糊涂了.析构函数的用途是什么,如果没有效果则赋值为NULL?
使用手动内存管理时,我们可以编写对未在类中声明的方法的调用.在这种情况下,我们在编译期间获得的仅是警告.这就是维基百科在最具特色的Objective-C功能之一上所说的:
面向对象编程的Objective-C模型基于传递给对象实例的消息.在Objective-C中,不仅仅是调用方法; 一个人发一条消息.这与C++使用的Simula风格的编程模型不同.这两个概念之间的区别在于如何执行方法或消息名称引用的代码.在Simula风格的语言中,方法名称在大多数情况下由编译器绑定到目标类中的一段代码.在Smalltalk和Objective-C中,消息的目标在运行时被解析,接收对象本身解释消息
那么为什么ARC中的编译错误呢?打破语言强大功能的原因是什么?我不知道什么是如此重要?任何人都能解释一下吗?谢谢
在我的视图控制器中,我订阅了UIKeyboardWillShowNotification:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
Run Code Online (Sandbox Code Playgroud)
因此,在我的keyboardWillShow:方法中,我可以从通知中检索有关键盘的一些信息。但是我想要获得的是对实际文本字段的引用,从而使键盘启动。我在Google中找不到该怎么做的方法,我怀疑这可能是不可能的,但有人可能知道。如果确实不可能,那么我想知道是否有可能使之相反-通过引用文本字段来获取有关键盘的信息。谢谢
我刚刚添加Google Analytics到我的pod中:
pod 'Google/Analytics'
Run Code Online (Sandbox Code Playgroud)
就像GA文档建议的那样.现在我的项目不会链接.它说:
library not found for -lGGLAnalytics
Run Code Online (Sandbox Code Playgroud)
有没有人遇到过这个?谢谢
ios ×4
iphone ×4
objective-c ×3
c++ ×2
cocoa-touch ×1
cocoapods ×1
game-center ×1
gamekit ×1
iboutlet ×1
linker ×1
multiplayer ×1
nsarray ×1
p2p ×1
uiimage ×1
uikit ×1
uilabel ×1
uitextfield ×1
wifi ×1
xcode ×1