相关疑难解决方法(0)

"FOUNDATION_EXPORT"vs"extern"

我想问一下有什么用背后的原因FOUNDATION_EXPORT,而不是extern目标C项目.

我已经检查了这个问题,使用FOUNDATION_EXPORT得到了高达340分(第一名),而extern只使用了74分(第二名).

谁有人解释原因?是否有任何实际的理由FOUNDATION_EXPORT代替使用extern

谢谢!

objective-c extern

137
推荐指数
1
解决办法
2万
查看次数

使用常量NSString作为NSUserDefaults的键

我正在使用NSUSerDefaults存储用户首选项.我记得在某处将键设置为常量是一个好主意 - 我同意.以下代码是我目前拥有的代码:

[[NSUserDefaults standardUserDefaults]
        setObject:[NSNumber numberWithInt:polygon.numberOfSides] 
           forKey:@"polygonNumberOfSides"];
Run Code Online (Sandbox Code Playgroud)

我尝试将其更改为:

@implementation Controller

NSString const *kPolygonNumberOfSides = @"polygonNumberOfSides";

-(void)savePolygonInfo {
    [[NSUserDefaults standardUserDefaults]
            setObject:[NSNumber numberWithInt:polygon.numberOfSides] 
               forKey:kPolygonNumberOfSides];
}
Run Code Online (Sandbox Code Playgroud)

虽然这确实有效,但它会产生" warning: passing argument 1 of 'objectForKey:' discards qualifiers from pointer target type".我很想让我的代码免受编译器警告的影响.我该如何修复此警告?

cocoa objective-c default-value

85
推荐指数
4
解决办法
5万
查看次数

你在哪里声明目标c的常数?

我在头文件const double EARTH_RADIUS=6353;中声明了一个常量,导入到各种其他头文件中,我收到了链接器错误.

Ld /Users/Teguh/Library/Developer/Xcode/DerivedData/BadgerNew-bjopcgcgsjkcvcevflfbvsjwfgnu/Build/Products/Debug-iphonesimulator/BadgerNew.app/BadgerNew normal i386
    cd /Users/Teguh/Dropbox/badgers/BadgerNew
    setenv MACOSX_DEPLOYMENT_TARGET 10.6
    setenv PATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-g++-4.2 -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk -L/Users/Teguh/Library/Developer/Xcode/DerivedData/BadgerNew-bjopcgcgsjkcvcevflfbvsjwfgnu/Build/Products/Debug-iphonesimulator -F/Users/Teguh/Library/Developer/Xcode/DerivedData/BadgerNew-bjopcgcgsjkcvcevflfbvsjwfgnu/Build/Products/Debug-iphonesimulator -filelist /Users/Teguh/Library/Developer/Xcode/DerivedData/BadgerNew-bjopcgcgsjkcvcevflfbvsjwfgnu/Build/Intermediates/BadgerNew.build/Debug-iphonesimulator/BadgerNew.build/Objects-normal/i386/BadgerNew.LinkFileList -mmacosx-version-min=10.6 -Xlinker -objc_abi_version -Xlinker 2 -framework CoreLocation -framework UIKit -framework Foundation -framework CoreGraphics -framework CoreData -o /Users/Teguh/Library/Developer/Xcode/DerivedData/BadgerNew-bjopcgcgsjkcvcevflfbvsjwfgnu/Build/Products/Debug-iphonesimulator/BadgerNew.app/BadgerNew

ld: duplicate symbol _EARTH_RADIUS in /Users/Teguh/Library/Developer/Xcode/DerivedData/BadgerNew-bjopcgcgsjkcvcevflfbvsjwfgnu/Build/Intermediates/BadgerNew.build/Debug-iphonesimulator/BadgerNew.build/Objects-normal/i386/NearbyIsiKota.o and /Users/Teguh/Library/Developer/Xcode/DerivedData/BadgerNew-bjopcgcgsjkcvcevflfbvsjwfgnu/Build/Intermediates/BadgerNew.build/Debug-iphonesimulator/BadgerNew.build/Objects-normal/i386/FrontPageofBadger.o for architecture i386
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

基本上我希望常量可用于我项目中的所有类.我应该在哪里申报?

objective-c

50
推荐指数
2
解决办法
7万
查看次数

如何在Obj-C代码中引用环境变量

我在Xcode源代码树中定义了一个名为"MY_SRC_DIR"的路径变量.我想获取此环境变量的值,并将其放在obj-c代码中的NSString中.例如,

-(NSString*) getSourceDir

{

    return @"${MY_SRC_DIR}"; // not the right solution and this is the question

}
Run Code Online (Sandbox Code Playgroud)

iphone xcode environment-variables

36
推荐指数
4
解决办法
2万
查看次数

NSNotifications是最佳实践

在尝试从显示获取数据的视图控制器中取消模型时,在异步提取完成时,我发布了NSNotification.

 [[NSNotificationCenter defaultCenter] postNotificationName:@"foobarFetchSuccess" object: foo];
Run Code Online (Sandbox Code Playgroud)

我养成了使用的习惯:

 #define FOO_FETCH_SUCCESS  @"foobarFetchSuccess"
Run Code Online (Sandbox Code Playgroud)

在一个公共头文件中,然后将其用于addObserver:和removeObserver:以及postNotificationName:

 [[NSNotificationCenter defaultCenter] addObserver:self @selector(gotData)
                                              name:FOO_FETCH_SUCCESS object: baz];
Run Code Online (Sandbox Code Playgroud)

所以@"foobarFetchSuccess"字符串遍布整个地方.还有更多像他一样的人.那么一次声明一个字符串并在任何地方使用它的最佳方法是什么?

objective-c nsnotification c-preprocessor

26
推荐指数
1
解决办法
9343
查看次数

如何声明NSString常量以传递给NSNotificationCenter

我的.h文件中有以下内容:

#ifndef _BALANCE_NOTIFICATION
#define _BALANCE NOTIFICATION
const NSString *BalanceUpdateNotification
#endif
Run Code Online (Sandbox Code Playgroud)

以及我的.m文件中的以下内容:

const NSString *BalanceUpdateNotification = @"BalanceUpdateNotification";
Run Code Online (Sandbox Code Playgroud)

我使用以下代码:

[[NSNotificationCenter defaultCenter]
    addObserver:self
    selector:@selector(updateBalance:)
    name:BalanceUpdateNotification
    object:nil];
Run Code Online (Sandbox Code Playgroud)

[[NSNotificatoinCenter defaultCenter]
    postNotificationName:BalanceUpdateNotification
    object:self userInfo:nil];
Run Code Online (Sandbox Code Playgroud)

哪个有效,但它给了我一个警告:

Passing argument 1 of 'postNotificationName:object:userInfo' discards qualifiers from pointer target type
Run Code Online (Sandbox Code Playgroud)

所以,我可以将其转换为(NSString*),但我想知道这样做的正确方法是什么.

iphone

23
推荐指数
2
解决办法
2万
查看次数

如何在iOS上使用NSLog打印出字符串常量

我有一个像这样定义的字符串常量:

#define kMyString @"This is my string text!";
Run Code Online (Sandbox Code Playgroud)

代码中的某处我想用NSLog打印出这段代码:

NSLog(@"This is it: %@",kMyString);
Run Code Online (Sandbox Code Playgroud)

但是得到一个构建错误:Expected expression.

我已经看过Apple的格式说明符,但无法弄明白.

有人可以向我解释如何做到这一点?

谢谢!

string iphone constants nslog ios

22
推荐指数
2
解决办法
6万
查看次数

如何声明我自己的CGRectZero像常量?

这是一个新手C/Objective-C问题:-)

假设我想要一个CGRectOne和一个CGRectTwo常量.

我该怎么说呢?

谢谢,Jérémy

static struct constants objective-c extern

21
推荐指数
3
解决办法
1万
查看次数

Obj-C中的NSNumber常量

我想通过本主题中与NSStrings相同的样式制作一些NSNumber常量.也就是说,我正在创建单独的constants.h/.m文件并将它们导入需要访问它们的类中.

constants objective-c nsnumber ios

18
推荐指数
3
解决办法
1万
查看次数

在objective-c中定义一个常量

我想在objective-c中定义一个常量.

以前我有以下功能:

+(NSString *) getDocumentsDir {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
    NSString *documentsDir = [paths objectAtIndex: 0];
    paths = nil;
    return documentsDir;
}
Run Code Online (Sandbox Code Playgroud)

我想只定义一个常量"Documents_Dir" - 当函数被调用时,之后访问以前创建的值.

我尝试了以下代码,但没有用:

#define getDocumentsDir \
{   \
#ifdef Documents_Dir    \
return Documents_Dir;   \
#else   \
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);  \
NSString *documentsDir = [paths objectAtIndex: 0];  \
#define Documents_Dir [paths objectAtIndex: 0]; \
paths = nil;    \
return Documents_Dir;   \
#endif  \
}   \
Run Code Online (Sandbox Code Playgroud)

我对预编译器指令不太满意,所以任何帮助都将不胜感激.

constants objective-c

16
推荐指数
2
解决办法
3万
查看次数