小编Wol*_*urs的帖子

在ObjC实现文件中声明的实例变量

我正在观看WWDC ARC介绍视频,在看到一个Apple工程师谈到Stack示例之前,我看到过ObjC中从未见过的东西.

以下代码用于ARC的堆栈示例:

@implementation Stack 
{ 
    // instance variable declared in implementation context
    NSMutableArray *_array; 
}

- (id)init 
{
   if (self = [super init])
      _array = [NSMutableArray array];
   return self;
}

- (void)push:(id)x 
{
   [_array addObject:x];
}

- (id)pop 
{
   id x = [_array lastObject];
   [_array removeLastObject];
   return x;
}

@end
Run Code Online (Sandbox Code Playgroud)

请注意在@implementation指令之后声明的实例变量.

现在让我感到惊讶的是,实际变量实际上可以在实现文件中声明,而不是静态变量.我的问题如下:

  • 这是SDK for iOS 5中引入的一些新构造还是已经可以使用很长时间了?
  • 如果不在对象外部访问实例变量,那么在实现中声明实例变量是不错的做法?它似乎比使用@private指令更清洁.

objective-c automatic-ref-counting

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

在iOS上加载NSBundle文件

我想创建一个具有非常灵活的图形用户界面(skinnable)的项目.为了实现这一点,我想从外部资源(例如网站)加载NSBundle.捆绑包应包含与主项目中的某些属性和方法相对应的nib(IBOutlets和IBActions)

Apple似乎限制了以这种方式使用NSBundle的可能性.有什么方法可以让我的工作吗?如果以传统方式不可能,那么什么是可推荐的替代方法?

loading nsbundle ios

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

savedInstanceState始终为null,但始终调用onSaveInstanceState()

首先,我是Android新手 - 这个问题看起来很愚蠢:)

我创建了一个包含ViewPager的主Activity.ViewPager链接到我的ActionBar选项卡.目前我的主要Activity以这种方式包含3个选项卡.

我的问题如下:当我在第3个选项卡上创建一个新的Activity,然后返回到我的主Activity时,我总是返回到我的第一个选项卡.

我在我的主Activity中尝试了以下方法:

// debugger breakpoints tell me this method is always called when other activity is shown ...
@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    int pos = getActionBar().getSelectedNavigationIndex();
    outState.putInt("tab", pos);
}

// however, in onCreate() my savedInstanceState is always 'null' ...
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    this.invalidateOptionsMenu();

    setContentView(R.layout.activity_main);

    final ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    mSectionsPagerAdapter = new SectionsPagerAdapter(
            getSupportFragmentManager());

    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    mViewPager
            .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
                @Override
                public void onPageSelected(int position) …
Run Code Online (Sandbox Code Playgroud)

android android-activity

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

找不到libxml2和iOS 5.0 SDK/Xcode 4.2(beta 3)的标题

似乎很多人在Apple官方论坛上遇到过这个问题,但还没有找到解决方案,所以我想在这里试试运气:)

使用iOS 5.0 SDK和Xcode 4.2(beta 3)似乎搞砸了,找不到libxml2的头文件.然而,当我浏览SDK目录时,我清楚地看到一个名为libxml2/libxml的文件夹,其中包含我需要导入的所有标头.

我想知道是否有人找到了解决方案.到目前为止,我发现可能有用的唯一解决方案是将所有标头复制到项目中,然后修改标头的导入路径(从导入中删除目录).据我所知,这删除了所有错误,但由于我不喜欢这个"修复",因此无法更改libxml的所有import语句.

libxml2 ios5

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

是否可以使用Git检索仅存在于某个分支中的标记列表?

我想知道在Git中是否可以检索标签列表(很像git tag命令的结果),但列表应该仅限于某个分支.

如果可以,有人可以解释这是怎么做的吗?也许有一些模式匹配魔法?

tags git branch

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

委托方法似乎是@required,它被声明为@optional

我为ObjC类创建了自己的Delegate.该类本身处理核心数据操作.委托方法用于通知其他类有关数据存储区发生的更改.处理数据存储区的类称为数据存储区,它的委托称为DatastoreDelegate.我的UIViewController(ContactsViewController)实现了委托.

我的DatastoreDelegate声明如下:

@class Datastore;
@protocol DatastoreDelegate <NSObject>;
@optional
- (void)didAddMessage:(Message *)message;
- (void)didUpdateContact:(Contact *)contact;
- (void)didAddContact:(Contact *)contact;
- (void)didUpdateContact:(Contact *)contact;
- (void)didDeleteContacts;
@end
Run Code Online (Sandbox Code Playgroud)

奇怪的是,除了[didAddMessage:]方法之外,我的代码都可以正常使用这些方法.每当我尝试从Datastore类中调用此委托时,我都会从ContactsViewController中收到错误.该错误告诉我在ContactsViewController实例中缺少[didAddMessage:]选择器(发送到实例的无法识别的选择器).如果它是可选的,选择器怎么会丢失?

我应该注意我的Datastore类是Singleton.我不确定这是否与我遇到的这个问题有某种关系.

singleton delegates objective-c instance selector

4
推荐指数
1
解决办法
4201
查看次数

AddressBook:尝试添加"Home"和"Work"地址,只显示1个

我正在尝试添加一个"主页"和"工作"地址我的个人记录.它似乎只显示1个(稍后添加的那个.是否有可能向Person添加多个地址并看到它们显示在UnknownPersonViewController中?如果是这样,我该怎么做?

这是我的代码:

void multiValueAddDictionaryValueAndLabel(ABMultiValueRef multi, CFDictionaryRef values, CFStringRef label) {
    if (multi && values != NULL) {
       ABMultiValueAddValueAndLabel(multi, values, label, NULL);          
    }               
}

CFStringRef getValueForKey(CFDictionaryRef dict, CFStringRef key) {
   CFStringRef value = NULL;

   if (CFDictionaryContainsKey(dict, key)) {
      value = CFDictionaryGetValue(dict, key);
   }

   return value;
}

ABRecordRef createPerson(CFDictionaryRef dict) {
   ABRecordRef person = ABPersonCreate();

   /*
    Add work address ...
    */

   ABMultiValueRef workAddress = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType);
   NSDictionary *values = [NSDictionary dictionaryWithObjectsAndKeys:
                               (NSString *)getValueForKey(dict, CFSTR("d:street")), (NSString *)kABPersonAddressStreetKey,
                               (NSString *)getValueForKey(dict, CFSTR("d:postalcode")), (NSString *)kABPersonAddressZIPKey,
                               (NSString *)getValueForKey(dict, …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c addressbook

4
推荐指数
1
解决办法
4067
查看次数

MonoTouch:使用Portable Class Libraries创建多平台应用程序

我的场景:尝试将我们公司创建的应用程序的一小部分从本机代码(用于iOS的iOS/Java的ObjC)移植到C-Sharp.该项目将与我们的Web服务进行交互.该项目的目标是确定将整个应用程序移植到Mono的可行性.

要创建URL,我想使用String.Format().我认为将这个'服务层'放在可移植类库(PCL)中是个明智的想法,因为我不希望这些代码在不同平台上发生变化.可悲的是,似乎字符串库不适用于PCL.

所以我的问题如下:

  1. 我认为PCL相对于"普通"库的主要优点是它们不需要针对不同平台进行重新编译.这个假设是否正确?
  2. 这种经历让我觉得目前PCL相当有限.我是否应该坚持使用PCL并解决这些问题,或者现在最好坚持使用"普通"库?---我假设"普通"库有更多功能暴露.

mono xamarin.ios xamarin.android portable-class-library

4
推荐指数
1
解决办法
2043
查看次数

-tableView:cellForRowAtIndexPath:没有被调用

我已经UITableView进入UIViewController并通过outlet和delegete连接,并且数据源被分配给自己.numberOfSectionsInTableView并且numberOfRowsInSection正在调用我尝试使用NSLog但是cellForRowAtIndexPath没有调用我的代码看起来像

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSLog(@" cellForRowAtIndexPath ");

    static NSString *CellIdentifier = @"CurrencyCell";

    CurrencyCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[CurrencyCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] ;
    }
    new *Obj = [appdelegate.array objectAtIndex:indexPath.row];


    cell.CurNameLabel.text = Obj.C_Name;
    cell.textLabel.text = @"sdfnhsdfndsio;";
    NSLog(@"C_Name %@", Obj.C_Name);

    return cell;
}
Run Code Online (Sandbox Code Playgroud)

任何一个电话我都会犯错误提前谢谢

iphone uitableview xcode4 ios5

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

System.Json丢失了吗?

我最近下载并安装了MonoTouch&Mono for Android试用版SDK.包括MonoDevelop,我使用这个工具进行开发.我正在尝试创建一个多平台的应用程序.

我正在尝试调用Web服务并解析返回的JSON数据.不知何故,似乎缺少System.JSON库.

也许我做错了什么或错过了什么.任何人都知道如何解决这个问题?

编辑:如果确实缺少System.Json,我可能不得不诉诸这个项目 ......

mono json xamarin.ios xamarin.android

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

对于自定义单元格,UITableView错误"无法在bundle中加载NIB:"

当我尝试使用以下自定义单元格编码时,它显示错误.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"SimpletablcellCell";
    SimpletablcellCell *cell = (SimpletablcellCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpletablcellCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }

    cell.nameLabel.text = [ar objectAtIndex:indexPath.row];
    cell.thumbnailImageView.image = [UIImage imageNamed:[ar1 objectAtIndex:indexPath.row]];
    cell.prepTimeLabel.text = [ar objectAtIndex:indexPath.row];

    return cell;
}
Run Code Online (Sandbox Code Playgroud)

错误消息

'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/apple/Library/Application Support/iPhone Simulator/6.0/Applications/FE02B3A1-C40C-4FAC-BBA6-B245350F3754/SImpleTab.app> (loaded)' with name 'SimpletablcellCell''
 *** First throw call stack:
(0x1c8f012 0x10cce7e 0x1c8edeb 0x22ffac 0x23198d …
Run Code Online (Sandbox Code Playgroud)

iphone uitableview ios

0
推荐指数
2
解决办法
9805
查看次数