This code works fine on the iPhone and the iPhone simulator, but crashes the simulator when running on the iPad:
const char *createsql = [MYClass GetDBCreationString];
sqlite3_stmt *crts;
if (sqlite3_prepare_v2(database, createsql, -1, &crts, NULL) == SQLITE_OK) {
int success = sqlite3_step(crts);
if (success != SQLITE_DONE) {
///problem
}
sqlite3_finalize(crts);
sqlite3_reset(crts);
}
It's code to create the SQLLite table that will hold that specific class. It crashes on the reset line every time, but it does successfully create the table.
On the iPhone and iPhone simulator it works fine. Is the finalize and reset being redundant? If so, why does it crash on iPad but work fine on iPhone?
The iPad SDK is under non-disclosure agreement. You should ask this question at the only place you can: http://devforums.apple.com
I think the sqlite3_reset() is not needed; sqlite3_finalize() should do what you want. Is the version of SQLite the same on both simulators?
Related
I'm trying to implement a gamecenter aware app targeted to iOS 6. To give some info on the environment I'm working on mac os 10.7.5 with XCode version is 4.5.2 and xcode is running iphone and ipad simulator version 6.0. The problem is I cannot connect to gamecenter in sandbox mode neither through ipad or iphone simulator, but the same code works as desired while testing in my iphone.
I followed the gamecenter programming guide in apple's developer library and I got this atm it is called from applicationDidFInishLaunching in appdelegate:
- (void)authenticateLocalUser:(UIViewController *)currentViewController
{
if (!gameCenterAvailable) return;
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error){
if (viewController != nil)
{
[currentViewController presentViewController:viewController animated:YES completion:nil];
}
else if (localPlayer.isAuthenticated)
{
NSLog(#"Player authenticated");
}
else
{
NSLog(#"Player not authenticated");
}
NSLog(#"Error: %#",error);
};
}
It outputs:
Error: Error Domain=GKErrorDomain Code=2 "The requested operation has been cancelled."
UserInfo=0x8690510 {NSLocalizedDescription=The requested operation has been cancelled.}
GKSConnSettings: set server: {
"gk-cdx" = "17.173.254.218:4398";
"gk-commnat-cohort" = "17.173.254.220:16386";
"gk-commnat-main0" = "17.173.254.219:16384";
"gk-commnat-main1" = "17.173.254.219:16385";
}
I already tried hosts file fix though my OS is not 10.8.2 but it didn't help. https://devforums.apple.com/thread/168811?tstart=0
Any idea what can be the possible cause?
Edit: Well, it turns out the output part starting with GKSConnSettings does not indicate any problems, that's the regular output while connecting to game center as I understood from what I read over internet. I printed the actual error message (GKErrorDomain = 2 ...) inside the authentication block.
I got the inspiration from : https://stackoverflow.com/a/8115807/837244, and decided to log in to game center account with a different piece of code. So in viewdidload I normally called:
[[GCHelper sharedInstance] authenticateLocalUser:self];
Now I commented that out, accessed game center through below URL scheme, logged in to my account and after that logged out.
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:#"gamecenter:"]];
And lastly reverted back by commenting out URL code and using the original code. Now it works fine, I guess the problem was that a game center account was already hooked up in simulator and it denied every login request bc of that. Hope apple goes clearer with error messages, it took a month to fix such a simple issue, may this help to others.
I know this question references specific Xcode and iOS simulation versions, but if your simulator is already logged in one account, and you don't mind losing whatever data you've got on the simulator (chances are small, but you never know), you can simply reset the settings and data on it.
Go to:
Simulator -> Reset Content and Settings...
...and confirm the action when prompted.
This is certainly true for Xcode7.x running an iOS 9.x simulator, someone else might be able to verify whether it's true for earlier versions (especially as I've unearthed quite an old question and answer).
Animal451
Necrothreadomancy: +1
I have developed an app, which imports contacts into Addressbook. The app works great on simulator, but when i tested on my ipod touch, it does not work correctly. It does not crash, but instead it give the wrong result.I have no idea what's wrong with it. Here is the code i think it works on simulator but not on ipod touch.
CFErrorRef couldAddPersonError = NULL;
BOOL couldAddPerson = ABAddressBookAddRecord(addressBook,
person,
&couldAddPersonError);
CFErrorRef couldSaveAddressBookError = NULL;
BOOL couldSaveAddressBook = ABAddressBookSave(addressBook,
&couldSaveAddressBookError);
Thanks in advance
I have a software-hardware related issue that I'm trying to troubleshoot. My app was developed for iPhone4, iOS5 and uses Core Motion framework to process accelerometer and gyroscope data in real time. The app fails when running on iPhone 3GS with iOS5
My main core-motion method looks like this:
[motionManager startDeviceMotionUpdatesToQueue:motionQueue withHandler:^(CMDeviceMotion *motion, NSError *error) {
//notify calibration delegate
if(calibrationDelegate)
{
[calibrationDelegate collectCalibrationMotionData:motion];
}
//a lot more processing
}
I have reports that iPhone3GS does not return yes to isGyroAvailable, while iPhone4 returns yes.
BOOL accelerometerAvailable = (motionManager.isAccelerometerAvailable)?YES:NO;
BOOL gyroscopeAvailable = (motionManager.isGyroAvailable)?YES:NO;
if(!accelerometerAvailable && ! gyroscopeAvailable)
{
//handle error
remoteControlState = kRemoteControlStateError;
}
I've painfully discovered that Apple sells my app to customers with iPhone4, 4s AND 3GS. The app does not work for customers with iPhone 3GS because the call above does not seem to pass the motion objects to the calibration delegate.
I do not have iPhone 3GS to test the app on, so I have a few questions:
Is it possible to specify anywhere in the XCode project properties
that I want my app to run ONLY on iPhone4 and above? (or devices with gyroscope available?)
Where can I find more information on iOS5 quirks like the one above
to better understand how iPhone3GS differs from iPhone4?
Is it possible to specify anywhere in the XCode project properties that I want my app to run ONLY on iPhone4 and above? (or devices with gyroscope available?)
Yes, you would specify such dependencies in the UIRequiredDeviceCapabilities key of your Info.plist (gyroscope would be the requirement in this case).
However, for a released app, it's unfortunately impossible to add new requirements.
I met a strange problem about IOS which I can't find the way to fix.
I'm developing an App on iPhone.
It works fine when I run it in Simulator or on my iPhone device.
It works fine when I shut down my iPhone and restart the iPhone.
But it can not be opened after my iPhone's is power off, still can't be opened after the iPhone has been charged.
But when I reconnect the iPhone to the Xcode without reinstall it, it can be opened.
I don't know what the problem is and what worse is that I can't debug it cos it works fine when I debug it.
I think that must be a CoreData problem and I did something in the applicationWillTerminate method:
(void)applicationWillTerminate:(UIApplication *)application {
....
NSError *error;
if (managedObjectContext != nil) {
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
// Handle the error.
}
}
}
What else am I supported to do? is there some delegate method like applicationWillTerminateWhenPowerOff to let me save the CoreData ? Or am I lose something ?
Update:
I fix it now. After checking the device log in organizer of Xcode, I find out the reason why it can't be opened.
It miss the SenTestingKit frame.
You probably have a bug in applicationDidFinishLaunching or another routine called when your application starts up.
First check for crash logs in Xcode's Organizer with the device connected.
You could also put some logging code in all of your UIApplication delegate routines to see which routines (if any) are getting called and perhaps throwing an exception. NSLogger is a nice utility for that since it can log from an iPhone to a Mac over WiFi.
I have a weird problem that hopefully someone could shed some light on.
I have an ipad app in the AppStore that was released when 3.2 was the only
available iOS for ipad. App ran fine on this iOS but as soon as 4.2.1 came out for ipad
and some of my users therefore updated to the new iOS the app now crashes when a
certain UIBarButtonItem is pressed. In the interim from iOS 3.2 to when iOS
4.2.1 came out i submitted no updates so it was the exact same app running on
each iOS yet i had this problem only on 4.2
After symbolicating in Organizer and viewing the Distribution build crash report
I am able to at least see the line of code that is causing this...
while(i < [filteredData count]) {
thats it!!...just a simple check during a while loop. The last thing in the crash
log points to the above line of code....
filteredData is a NSMutableArray that is definitely allocated/initialized at
this point. It is actually used in another piece of code before this with no
problems.
Again, this line of code gave my app no problems on iOS 3.2 but on iOS 4.2.1 it
causes EXC_BAD_ACCESS (SIGSEGV)
When i install the app on my device via xcode with a debug or release config it works perfect but when installing from AppStore (distribution build) it crashes and only on 4.2!
Just to clarify.....
app works perfect on debug AND distribution modes on 3.2
app works perfect on debug mode on 4.2 BUT app crashes on distribution mode on 4.2
Any thoughts? .....cuz i'm confused/lost
Thanks for taking the time
Possibly an optimisation made by the compiler in Release builds causes this, especially as you dont get the issue in Debug
Can you refactor to...
NSUInteger count = [filteredData count];
while(i < count) {
Or is filteredData mutating in the loop?
NSUInteger count = [filteredData count];
while(i < count) {
blah;
blah;
count = [filteredData count];
}