iActiveRecord
iActiveRecord copied to clipboard
Crash on x64 architecture
Hello! When I run the projects on 64bit simulator, I get crashes.
In one project it is
// ARLazyFetcher.m
...
- (ARLazyFetcher *)where:(NSString *)aCondition, ...{
...
NSString * result = [[NSString alloc] initWithFormat:aCondition
arguments:data.mutableBytes];
...
In the other project the crash is in
//sqlite3_unicode.c file
...
/*
** <sqlite3_unicode>
** The following function is the default entry point of an SQlite extension built as a
** dynamically linked library. On calling sqlite3_load_extension() sqlite3 will call
** this function to initialise unicode functionality.
*/
#ifndef SQLITE_CORE
SQLITE_EXPORT int sqlite3_extension_init(
sqlite3 *db,
char **pzErrMsg,
const sqlite3_api_routines *pApi
){
SQLITE_EXTENSION_INIT2(pApi)
return sqlite3_unicode_init(db); // crashes here
}
#endif
Please let me know if any of them do reproduce on your station as well. Thank you in advance!
Also found this issue with iActiveRecord under 64-bit. Removing the architecture from Build Settings temporarily solved the problem.
did you manage to overcome this? looks like there is no support for 64-bit at all ?
Possibly dirty fix:
NSString* result = aCondition;
for (int i = 0; i < sqlArguments.count; i++) {
NSRange range = [result rangeOfString:@"%@"];
result = [result stringByReplacingCharactersInRange:range withString:[sqlArguments objectAtIndex:i]];
}
Nice joshuatam, thank you, helped
Thanks @joshuatam! I think this is a slightly less dirty version of the fix:
NSString* result = aCondition;
NSRange testRange = NSMakeRange(0, result.length);
for (int i = 0; i < sqlArguments.count; i++) {
NSRange range = [result rangeOfString:@"%@" options:NSLiteralSearch range:testRange];
result = [result stringByReplacingCharactersInRange:range withString:[sqlArguments objectAtIndex:i]];
//move the test range up to the last character of the replacement to prevent hitting
//literal %@ in the args
NSUInteger prefix = range.location + [[sqlArguments objectAtIndex:i] length];
testRange = NSMakeRange(prefix, result.length - prefix);
}
Thanks. Can anyone make a pull request for it?
I have created a pull request to fix it based on "mgod" version. It is working now.
Can you merge pls: https://github.com/AlexDenisov/iActiveRecord/pull/91