NSString value not persistent
up vote
0
down vote
favorite
I am declaring class variable of type NSString in my "class.h":
@interface class : NSObject<GADInterstitialDelegate,
GADBannerViewDelegate, GADRewardBasedVideoAdDelegate,
GADNativeAppInstallAdLoaderDelegate, GADNativeContentAdLoaderDelegate>
{
...
NSString* appId;
}
I the "class.mm" file In function "a" i am assigning a value to the variable:
appId = [[dic objectForKey:@"appid"] stringValue]
The string value at this point is correct.
The problem happen when other function call - function "b".
[GoogleMobileAdsMediationTestSuite presentWithAppID:appId onViewController:rootViewController delegate:nil];
when i try to use this appId - it doesn't contain the assigned, instead I assume it contain a memory address.
How can I keep the value of appId
in all future references?
ios objective-c nsstring
|
show 4 more comments
up vote
0
down vote
favorite
I am declaring class variable of type NSString in my "class.h":
@interface class : NSObject<GADInterstitialDelegate,
GADBannerViewDelegate, GADRewardBasedVideoAdDelegate,
GADNativeAppInstallAdLoaderDelegate, GADNativeContentAdLoaderDelegate>
{
...
NSString* appId;
}
I the "class.mm" file In function "a" i am assigning a value to the variable:
appId = [[dic objectForKey:@"appid"] stringValue]
The string value at this point is correct.
The problem happen when other function call - function "b".
[GoogleMobileAdsMediationTestSuite presentWithAppID:appId onViewController:rootViewController delegate:nil];
when i try to use this appId - it doesn't contain the assigned, instead I assume it contain a memory address.
How can I keep the value of appId
in all future references?
ios objective-c nsstring
2
can you add some additional code
– Anbu.karthik
2 days ago
Checking at this code tell me there is no issue. Search forappId
and check if it's value is updated some where else, also show code were you are displaying to value of appId.
– rptwsthi
2 days ago
Is appId a member variable? If yes, are you calling the functions a and b on the same object?
– SSB95
2 days ago
@rptwsthi can it be that the app id value is being cleared when dic (dictionary) is being cleared? So when the net function calls and dic is no longer valid the appId value points to unfilled address?
– Michael A
2 days ago
Please show the whole definition. How is that "class variable" declared?
– Sulthan
2 days ago
|
show 4 more comments
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I am declaring class variable of type NSString in my "class.h":
@interface class : NSObject<GADInterstitialDelegate,
GADBannerViewDelegate, GADRewardBasedVideoAdDelegate,
GADNativeAppInstallAdLoaderDelegate, GADNativeContentAdLoaderDelegate>
{
...
NSString* appId;
}
I the "class.mm" file In function "a" i am assigning a value to the variable:
appId = [[dic objectForKey:@"appid"] stringValue]
The string value at this point is correct.
The problem happen when other function call - function "b".
[GoogleMobileAdsMediationTestSuite presentWithAppID:appId onViewController:rootViewController delegate:nil];
when i try to use this appId - it doesn't contain the assigned, instead I assume it contain a memory address.
How can I keep the value of appId
in all future references?
ios objective-c nsstring
I am declaring class variable of type NSString in my "class.h":
@interface class : NSObject<GADInterstitialDelegate,
GADBannerViewDelegate, GADRewardBasedVideoAdDelegate,
GADNativeAppInstallAdLoaderDelegate, GADNativeContentAdLoaderDelegate>
{
...
NSString* appId;
}
I the "class.mm" file In function "a" i am assigning a value to the variable:
appId = [[dic objectForKey:@"appid"] stringValue]
The string value at this point is correct.
The problem happen when other function call - function "b".
[GoogleMobileAdsMediationTestSuite presentWithAppID:appId onViewController:rootViewController delegate:nil];
when i try to use this appId - it doesn't contain the assigned, instead I assume it contain a memory address.
How can I keep the value of appId
in all future references?
ios objective-c nsstring
ios objective-c nsstring
edited 2 days ago
asked 2 days ago
Michael A
2,4661247103
2,4661247103
2
can you add some additional code
– Anbu.karthik
2 days ago
Checking at this code tell me there is no issue. Search forappId
and check if it's value is updated some where else, also show code were you are displaying to value of appId.
– rptwsthi
2 days ago
Is appId a member variable? If yes, are you calling the functions a and b on the same object?
– SSB95
2 days ago
@rptwsthi can it be that the app id value is being cleared when dic (dictionary) is being cleared? So when the net function calls and dic is no longer valid the appId value points to unfilled address?
– Michael A
2 days ago
Please show the whole definition. How is that "class variable" declared?
– Sulthan
2 days ago
|
show 4 more comments
2
can you add some additional code
– Anbu.karthik
2 days ago
Checking at this code tell me there is no issue. Search forappId
and check if it's value is updated some where else, also show code were you are displaying to value of appId.
– rptwsthi
2 days ago
Is appId a member variable? If yes, are you calling the functions a and b on the same object?
– SSB95
2 days ago
@rptwsthi can it be that the app id value is being cleared when dic (dictionary) is being cleared? So when the net function calls and dic is no longer valid the appId value points to unfilled address?
– Michael A
2 days ago
Please show the whole definition. How is that "class variable" declared?
– Sulthan
2 days ago
2
2
can you add some additional code
– Anbu.karthik
2 days ago
can you add some additional code
– Anbu.karthik
2 days ago
Checking at this code tell me there is no issue. Search for
appId
and check if it's value is updated some where else, also show code were you are displaying to value of appId.– rptwsthi
2 days ago
Checking at this code tell me there is no issue. Search for
appId
and check if it's value is updated some where else, also show code were you are displaying to value of appId.– rptwsthi
2 days ago
Is appId a member variable? If yes, are you calling the functions a and b on the same object?
– SSB95
2 days ago
Is appId a member variable? If yes, are you calling the functions a and b on the same object?
– SSB95
2 days ago
@rptwsthi can it be that the app id value is being cleared when dic (dictionary) is being cleared? So when the net function calls and dic is no longer valid the appId value points to unfilled address?
– Michael A
2 days ago
@rptwsthi can it be that the app id value is being cleared when dic (dictionary) is being cleared? So when the net function calls and dic is no longer valid the appId value points to unfilled address?
– Michael A
2 days ago
Please show the whole definition. How is that "class variable" declared?
– Sulthan
2 days ago
Please show the whole definition. How is that "class variable" declared?
– Sulthan
2 days ago
|
show 4 more comments
3 Answers
3
active
oldest
votes
up vote
0
down vote
accepted
You know how, see when you assign value it just keep reference form original object but soon you initialize new object with new
alloc
or call retain, it's a copy of original. You can keep retain or use
NSString *entityName = [[NSString alloc] initWithString:[[dic objectForKey:@"appid"] stringValue]];`
Or may be you can define appId
as:
@property (strong, nonatomic) NSString *appId;
in interface and, refer it with self.appId
.
add a comment |
up vote
0
down vote
So i got it to work by doing this:
appId = [[dic objectForKey:@"appid"] retain];
If that compiles, it means that you've turned off ARC (automatic reference counting) for that file or for your whole project. There's little reason to do that these days, especially if you're not very familiar with the manual reference counting rules. The best solution is almost certainly to turn ARC back on and remove the retain
call.
So that means that the appId my assumption was correct and appId was referencing the "dic" object all this time? The question is how can i detach the appId from the "dic" object so it will stay alive even when the object is cleard?
Basically, you were assigning a string to appId
without retaining the string. When the dictionary you got it from was released, it also released all the objects that it contained, including the string that appId
pointed to. With manual reference counting, which you are apparently using, you have to retain
any objects that you keep a reference to, and release
those objects when you no longer need that reference. If you create an object with alloc
/init
or new
or copy
(or some variant of those), you don't need to retain
that object, but you do need to release
it. You can read more about it in Memory Management Rules.
So in case i alloc / init to the variable i still need to release it, so its quite the same as retain
– Michael A
yesterday
Yes, when you create an object, you need to release it. If you get an object that someone else created, you need to retain it until you're done with it, and then release it. But again, there's little point in doing that yourself — the compiler can do it better and more reliably than you can, so unless there's some real reason not to, just turn on ARC and let the compiler handle it for you.
– Caleb
yesterday
add a comment |
up vote
-2
down vote
Try to alloc appID variable like: [NSString string] in "class.m" and then you can change value of this variable.
You try to assign value to null
New contributor
You can't change the string of the NSString you get back from[NSString string]
— you can only replace it with a different string. And if you're just going to replace it, there's no point in allocating it in the first place.
– Caleb
2 days ago
add a comment |
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
accepted
You know how, see when you assign value it just keep reference form original object but soon you initialize new object with new
alloc
or call retain, it's a copy of original. You can keep retain or use
NSString *entityName = [[NSString alloc] initWithString:[[dic objectForKey:@"appid"] stringValue]];`
Or may be you can define appId
as:
@property (strong, nonatomic) NSString *appId;
in interface and, refer it with self.appId
.
add a comment |
up vote
0
down vote
accepted
You know how, see when you assign value it just keep reference form original object but soon you initialize new object with new
alloc
or call retain, it's a copy of original. You can keep retain or use
NSString *entityName = [[NSString alloc] initWithString:[[dic objectForKey:@"appid"] stringValue]];`
Or may be you can define appId
as:
@property (strong, nonatomic) NSString *appId;
in interface and, refer it with self.appId
.
add a comment |
up vote
0
down vote
accepted
up vote
0
down vote
accepted
You know how, see when you assign value it just keep reference form original object but soon you initialize new object with new
alloc
or call retain, it's a copy of original. You can keep retain or use
NSString *entityName = [[NSString alloc] initWithString:[[dic objectForKey:@"appid"] stringValue]];`
Or may be you can define appId
as:
@property (strong, nonatomic) NSString *appId;
in interface and, refer it with self.appId
.
You know how, see when you assign value it just keep reference form original object but soon you initialize new object with new
alloc
or call retain, it's a copy of original. You can keep retain or use
NSString *entityName = [[NSString alloc] initWithString:[[dic objectForKey:@"appid"] stringValue]];`
Or may be you can define appId
as:
@property (strong, nonatomic) NSString *appId;
in interface and, refer it with self.appId
.
answered 2 days ago
rptwsthi
8,49485292
8,49485292
add a comment |
add a comment |
up vote
0
down vote
So i got it to work by doing this:
appId = [[dic objectForKey:@"appid"] retain];
If that compiles, it means that you've turned off ARC (automatic reference counting) for that file or for your whole project. There's little reason to do that these days, especially if you're not very familiar with the manual reference counting rules. The best solution is almost certainly to turn ARC back on and remove the retain
call.
So that means that the appId my assumption was correct and appId was referencing the "dic" object all this time? The question is how can i detach the appId from the "dic" object so it will stay alive even when the object is cleard?
Basically, you were assigning a string to appId
without retaining the string. When the dictionary you got it from was released, it also released all the objects that it contained, including the string that appId
pointed to. With manual reference counting, which you are apparently using, you have to retain
any objects that you keep a reference to, and release
those objects when you no longer need that reference. If you create an object with alloc
/init
or new
or copy
(or some variant of those), you don't need to retain
that object, but you do need to release
it. You can read more about it in Memory Management Rules.
So in case i alloc / init to the variable i still need to release it, so its quite the same as retain
– Michael A
yesterday
Yes, when you create an object, you need to release it. If you get an object that someone else created, you need to retain it until you're done with it, and then release it. But again, there's little point in doing that yourself — the compiler can do it better and more reliably than you can, so unless there's some real reason not to, just turn on ARC and let the compiler handle it for you.
– Caleb
yesterday
add a comment |
up vote
0
down vote
So i got it to work by doing this:
appId = [[dic objectForKey:@"appid"] retain];
If that compiles, it means that you've turned off ARC (automatic reference counting) for that file or for your whole project. There's little reason to do that these days, especially if you're not very familiar with the manual reference counting rules. The best solution is almost certainly to turn ARC back on and remove the retain
call.
So that means that the appId my assumption was correct and appId was referencing the "dic" object all this time? The question is how can i detach the appId from the "dic" object so it will stay alive even when the object is cleard?
Basically, you were assigning a string to appId
without retaining the string. When the dictionary you got it from was released, it also released all the objects that it contained, including the string that appId
pointed to. With manual reference counting, which you are apparently using, you have to retain
any objects that you keep a reference to, and release
those objects when you no longer need that reference. If you create an object with alloc
/init
or new
or copy
(or some variant of those), you don't need to retain
that object, but you do need to release
it. You can read more about it in Memory Management Rules.
So in case i alloc / init to the variable i still need to release it, so its quite the same as retain
– Michael A
yesterday
Yes, when you create an object, you need to release it. If you get an object that someone else created, you need to retain it until you're done with it, and then release it. But again, there's little point in doing that yourself — the compiler can do it better and more reliably than you can, so unless there's some real reason not to, just turn on ARC and let the compiler handle it for you.
– Caleb
yesterday
add a comment |
up vote
0
down vote
up vote
0
down vote
So i got it to work by doing this:
appId = [[dic objectForKey:@"appid"] retain];
If that compiles, it means that you've turned off ARC (automatic reference counting) for that file or for your whole project. There's little reason to do that these days, especially if you're not very familiar with the manual reference counting rules. The best solution is almost certainly to turn ARC back on and remove the retain
call.
So that means that the appId my assumption was correct and appId was referencing the "dic" object all this time? The question is how can i detach the appId from the "dic" object so it will stay alive even when the object is cleard?
Basically, you were assigning a string to appId
without retaining the string. When the dictionary you got it from was released, it also released all the objects that it contained, including the string that appId
pointed to. With manual reference counting, which you are apparently using, you have to retain
any objects that you keep a reference to, and release
those objects when you no longer need that reference. If you create an object with alloc
/init
or new
or copy
(or some variant of those), you don't need to retain
that object, but you do need to release
it. You can read more about it in Memory Management Rules.
So i got it to work by doing this:
appId = [[dic objectForKey:@"appid"] retain];
If that compiles, it means that you've turned off ARC (automatic reference counting) for that file or for your whole project. There's little reason to do that these days, especially if you're not very familiar with the manual reference counting rules. The best solution is almost certainly to turn ARC back on and remove the retain
call.
So that means that the appId my assumption was correct and appId was referencing the "dic" object all this time? The question is how can i detach the appId from the "dic" object so it will stay alive even when the object is cleard?
Basically, you were assigning a string to appId
without retaining the string. When the dictionary you got it from was released, it also released all the objects that it contained, including the string that appId
pointed to. With manual reference counting, which you are apparently using, you have to retain
any objects that you keep a reference to, and release
those objects when you no longer need that reference. If you create an object with alloc
/init
or new
or copy
(or some variant of those), you don't need to retain
that object, but you do need to release
it. You can read more about it in Memory Management Rules.
edited 23 hours ago
rptwsthi
8,49485292
8,49485292
answered 2 days ago
Caleb
108k16147237
108k16147237
So in case i alloc / init to the variable i still need to release it, so its quite the same as retain
– Michael A
yesterday
Yes, when you create an object, you need to release it. If you get an object that someone else created, you need to retain it until you're done with it, and then release it. But again, there's little point in doing that yourself — the compiler can do it better and more reliably than you can, so unless there's some real reason not to, just turn on ARC and let the compiler handle it for you.
– Caleb
yesterday
add a comment |
So in case i alloc / init to the variable i still need to release it, so its quite the same as retain
– Michael A
yesterday
Yes, when you create an object, you need to release it. If you get an object that someone else created, you need to retain it until you're done with it, and then release it. But again, there's little point in doing that yourself — the compiler can do it better and more reliably than you can, so unless there's some real reason not to, just turn on ARC and let the compiler handle it for you.
– Caleb
yesterday
So in case i alloc / init to the variable i still need to release it, so its quite the same as retain
– Michael A
yesterday
So in case i alloc / init to the variable i still need to release it, so its quite the same as retain
– Michael A
yesterday
Yes, when you create an object, you need to release it. If you get an object that someone else created, you need to retain it until you're done with it, and then release it. But again, there's little point in doing that yourself — the compiler can do it better and more reliably than you can, so unless there's some real reason not to, just turn on ARC and let the compiler handle it for you.
– Caleb
yesterday
Yes, when you create an object, you need to release it. If you get an object that someone else created, you need to retain it until you're done with it, and then release it. But again, there's little point in doing that yourself — the compiler can do it better and more reliably than you can, so unless there's some real reason not to, just turn on ARC and let the compiler handle it for you.
– Caleb
yesterday
add a comment |
up vote
-2
down vote
Try to alloc appID variable like: [NSString string] in "class.m" and then you can change value of this variable.
You try to assign value to null
New contributor
You can't change the string of the NSString you get back from[NSString string]
— you can only replace it with a different string. And if you're just going to replace it, there's no point in allocating it in the first place.
– Caleb
2 days ago
add a comment |
up vote
-2
down vote
Try to alloc appID variable like: [NSString string] in "class.m" and then you can change value of this variable.
You try to assign value to null
New contributor
You can't change the string of the NSString you get back from[NSString string]
— you can only replace it with a different string. And if you're just going to replace it, there's no point in allocating it in the first place.
– Caleb
2 days ago
add a comment |
up vote
-2
down vote
up vote
-2
down vote
Try to alloc appID variable like: [NSString string] in "class.m" and then you can change value of this variable.
You try to assign value to null
New contributor
Try to alloc appID variable like: [NSString string] in "class.m" and then you can change value of this variable.
You try to assign value to null
New contributor
New contributor
answered 2 days ago
Nikita Nagatkin
1
1
New contributor
New contributor
You can't change the string of the NSString you get back from[NSString string]
— you can only replace it with a different string. And if you're just going to replace it, there's no point in allocating it in the first place.
– Caleb
2 days ago
add a comment |
You can't change the string of the NSString you get back from[NSString string]
— you can only replace it with a different string. And if you're just going to replace it, there's no point in allocating it in the first place.
– Caleb
2 days ago
You can't change the string of the NSString you get back from
[NSString string]
— you can only replace it with a different string. And if you're just going to replace it, there's no point in allocating it in the first place.– Caleb
2 days ago
You can't change the string of the NSString you get back from
[NSString string]
— you can only replace it with a different string. And if you're just going to replace it, there's no point in allocating it in the first place.– Caleb
2 days ago
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53372212%2fnsstring-value-not-persistent%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
2
can you add some additional code
– Anbu.karthik
2 days ago
Checking at this code tell me there is no issue. Search for
appId
and check if it's value is updated some where else, also show code were you are displaying to value of appId.– rptwsthi
2 days ago
Is appId a member variable? If yes, are you calling the functions a and b on the same object?
– SSB95
2 days ago
@rptwsthi can it be that the app id value is being cleared when dic (dictionary) is being cleared? So when the net function calls and dic is no longer valid the appId value points to unfilled address?
– Michael A
2 days ago
Please show the whole definition. How is that "class variable" declared?
– Sulthan
2 days ago